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#