ORA-00933:SQL命令未正确结束

Ste*_*orn 5 sql oracle ora-00933

我正在使用OLEDB提供程序将ADO.Net连接到Oracle数据库.在我的循环中,我正在做一个插入:

insert into ps_tl_compleave_tbl values('2626899', 0, TO_DATE('01/01/2002', 'MM/DD/YYYY'), 'LTKN', 'LTKN', '52', TO_DATE('01/01/2002', 'MM/DD/YYYY'), 16.000000, 24.000)insert into ps_tl_compleave_tbl values('4327142', 0, TO_DATE('03/23/2002', 'MM/DD/YYYY'), 'LTKN', 'LTKN', '51', TO_DATE('03/23/2002', 'MM/DD/YYYY'), 0.000000, 0.000)
Run Code Online (Sandbox Code Playgroud)

第一个插入成功但第二个插入错误:

ORA-00933: SQL command not properly ended
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

小智 12

在.net中,当我们尝试在末尾执行带分号的单个Oracle SQL语句时.结果将是oracle错误:ora-00911:无效字符.好吧,你认为一个SQL语句不需要分号,但是如果在一个字符串中执行2个SQL语句,例如:

Dim db As Database = DatabaseFactory.CreateDatabase("db")
Dim cmd As System.Data.Common.DbCommand
Dim sql As String = ""

sql = "DELETE FROM iphone_applications WHERE appid = 1; DELETE FROM iphone_applications WHERE appid = 2; "

cmd = db.GetSqlStringCommand(sql)
db.ExecuteNonQuery(cmd)
Run Code Online (Sandbox Code Playgroud)

上面的代码将为您提供相同的Oracle错误:ora-00911:无效字符.

此问题的解决方案是使用BEGINEND;语法包装2个Oracle SQL语句,例如:

sql = "BEGIN DELETE FROM iphone_applications WHERE appid = 1; DELETE FROM iphone_applications WHERE appid = 2; END;"
Run Code Online (Sandbox Code Playgroud)

礼貌:http://www.lazyasscoder.com/Article.aspx?id = 89&title = ora -00911%3A + inevalid+character+when+executing+multiple+Oracle+SQL+statements

  • 当您在问题/答案中输入代码时,如果将其格式化为代码,则更具可读性."{}"按钮为您执行此操作,或者您可以手动缩进代码.您还可以使用后退标记来标记句子中的代码. (2认同)

小智 6

在Oracle中的分号';' 仅用于sqlplus.当您使用ODBC/JDBC,OLEDB等时,不要在语句的末尾加上分号.在上面的例子中,您实际上正在执行2个不同的语句,因此处理问题的最佳方法是使用2个语句,而不是尝试组合成单个语句,因为您不能使用分号.


mas*_*ini 3

在我看来,您似乎;在两个语句之间缺少一个: 尝试添加并让我们知道。
insert into ps_tl_compleave_tbl values('2626899', 0, TO_DATE('01/01/2002', 'MM/DD/YYYY'), 'LTKN', 'LTKN', '52', TO_DATE('01/01/2002', 'MM/DD/YYYY'), 16.000000, 24.000)
;
insert into ps_tl_compleave_tbl values('4327142', 0, TO_DATE('03/23/2002', 'MM/DD/YYYY'), 'LTKN', 'LTKN', '51', TO_DATE('03/23/2002', 'MM/DD/YYYY'), 0.000000, 0.000)
;
;