我需要更新一些代码,作为其中的一部分,我需要在表中插入一行并获取刚刚输入的行的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()
有什么想法吗?
答案 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代码工作正常。
感谢所有回复的人。