VB.NET Oracle SQL“;在“;加上;返回到";给出ORA-00933命令未正确结束

VB.NET Oracle SQL“;在“;加上;返回到";给出ORA-00933命令未正确结束,vb.net,oracle,odp.net,Vb.net,Oracle,Odp.net,我需要更新一些代码,作为其中的一部分,我需要在表中插入一行,并获取刚刚输入的行的id(主键) 我已经对此进行了研究,我认为我应该使用返回到和Oracle参数。我过去曾成功地使用参数插入值 我有一个从VB.NET运行的INSERT语句,但只要我将文本“RETURNING id INTO:myId”添加到ORA-00933中,命令就没有正确结束 下面是代码的一个版本 sql = "INSERT ... RETURNING id INTO :myId" Connect() Dim intRecsAff

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

我已经对此进行了研究,我认为我应该使用返回到和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()

有什么想法吗?

我认为您的语法不正确:

 sql = "INSERT ... RETURNING id INTO myId"
示例如下:
事实上,我意识到发生了什么。我删掉了完整的SQL,因为它很长,而且里面有一些敏感的东西

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

重新编写SQL以使用值,VB.Net代码运行良好


感谢所有回复者。

您的SQL有问题,但由于您只是部分显示,因此无法真正提供帮助。请发布完整的SQL。返回到is PL/SQL语法,而不是SQL,因此您需要使用匿名PL/SQL块(在开始和结束时换行)