Oracle : ORA 00933: SQL command not properly ended

ORA-00933: SQL command not properly ended

基于这个报错,网上有很多答案,包括:
1.在INSERT语句中使用了JOIN或者ORDER BY
2.在UPDATE语句中使用了JOIN
3.在DELETE语句中使用了ORDER BY
4.在SELECT语句中使用了UNIONUNION 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一下,如果有知道这个问题原因的大神,希望可以科普一下~

参考资料

C#连接Oracle数据库的方法

-----------------------后记------------------------------------------
我去stackoverflow上面问了一下:简单来说,不需要在最后加分号
ORA 00933: SQL command not properly ended with C#

posted @ 2020-11-25 16:20  Lulus  阅读(3407)  评论(0编辑  收藏  举报