VB.NET Oracle SQL "INSERT INTO" with "RETURNING INTO" 给出 ORA-00933 命令未正确结束

VB.NET Oracle SQL "INSERT INTO" with "RETURNING INTO" gives ORA-00933 Command Not Properly Ended

我需要更新一些代码,作为其中的一部分,我需要在 table 中插入一行并获取刚刚输入的行的 ID(主键)。

对此进行了研究,我相信我应该使用 RETURNING INTO 和 Oracle Parameters。我过去曾成功地使用参数来插入值。

我有一个从 VB.NET 完美运行的 INSERT 语句,但是一旦我添加文本“”RETURNING id INTO :myId”,我就会得到 ORA-00933 命令未正确结束。

这是代码的一个版本。

sql = "INSERT ... RETURNING id INTO :myId"
Connect()
Dim intRecsAffected As Integer = 0

Dim comm As OracleCommand = New OracleCommand(sql, _conn)
Dim param As OracleParameter
param = New OracleParameter()

param.ParameterName = ":myId"
param.OracleDbType = OracleDbType.Int32
param.Direction = ParameterDirection.Output ' Tried ReturnValue

comm.Parameters.Add(param)

intRecsAffected = comm.ExecuteNonQuery()
id = comm.Parameters(":myId").Value

Disconnect()

有什么想法吗?

我认为您的语法不正确:

 sql = "INSERT ... RETURNING id INTO myId"

示例如下: https://oracle-base.com/articles/misc/dml-returning-into-clause

其实,意识到是怎么回事了。我剪掉了完整的 SQL 因为它很长而且里面有一些敏感的东西。

INSERT 使用 SELECT 而不是 VALUES 来获取字段的值。那行不通-我猜是因为带有 SELECT 的 INSERT 可以添加多行,即使在这种情况下它不会。

已重写 SQL 以使用 VALUES,VB.Net 代码工作正常。

感谢所有回复的人。