VB.NET Oracle SQL“INSERT INTO”与“RETURNING INTO”使ORA-00933命令无法正常结束

时间:2016-05-27 10:16:22

标签: vb.net oracle odp.net

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

已经研究过这个,我相信我应该使用RETURNING INTO和Oracle参数。我已成功使用过去的参数来插入值。

我有一个完全从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()

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

我认为你的语法不正确:

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

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

答案 1 :(得分:0)

实际上,意识到发生了什么。我剪掉了我的完整SQL,因为它很长,那里有一些敏感的东西。

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

重新编写SQL以使用VALUES并且VB.Net代码工作正常。

感谢所有回复的人。