ORA-00933: SQL command not properly ended
基于这个报错,网上有很多答案,包括:
1.在INSERT语句中使用了JOIN
或者ORDER BY
2.在UPDATE语句中使用了JOIN
3.在DELETE语句中使用了ORDER BY
4.在SELECT语句中使用了UNION
或UNION ALL
,并且在非结尾的地方使用了ORDER BY
5.在SELECT语句表之间忘记了逗号,
6.在Oracle 8i中使用INNER JOIN
或类似的关键词(这些是在Oracle 9i中实现的)
7.遗漏逗号,遗漏括号,子语句使用错误
...
比较好的博客有How To Resolve ORA-00933 SQL Command Not Properly Ended
可以说这个问题产生的原因五花八门
我的问题也很奇怪,我使用Navicat直连数据库,并执行语句进行测试,测试通过
delete from d1
where ID in
(select d1.ID
from d1
join d2
on d1.d2ID = d2.ID
where d2.xxx = '...');
执行结果
> Affected rows: 0
> 时间: 0.013s
但使用Oracle.DataAccess
或者Oracle.ManagedDataAccess
执行该语句的时候,报错:
ORA 00933: SQL command not properly ended
这令我百思不得其解,后来通过测试发现:把最后的分号去掉就可以了,即变成:
delete from d1
where ID in
(select d1.ID
from d1
join d2
on d1.d2ID = d2.ID
where d2.xxx = '...')
这里Mark一下,如果有知道这个问题原因的大神,希望可以科普一下~
参考资料
-----------------------后记------------------------------------------
我去stackoverflow上面问了一下:简单来说,不需要在最后加分号
ORA 00933: SQL command not properly ended with C#