我有这个简单的Oracle语句用于删除行...但我无法正常工作
delete from NPEA.tnpe00_all
where EXISTS
(select 1
from NPEA.tnpe05_doc, NPEA.tnpe00_all
where NPEA.tnpe05_doc.n_doc = NPEA.tnpe00_all.t_doc
and NPEA.tnpe05_doc.n_prt is null
and NPEA.tnpe05_doc.n_can = 4
order by n_doc)
错误代码是
00907. 00000 - "missing right parenthesis"
这有什么问题?
答案 0 :(得分:10)
您不能在EXISTS子句中使用ORDER BY:
SQL> SELECT 1 FROM dual WHERE EXISTS (SELECT 1 FROM dual ORDER BY 1);
ERROR at line 1:
ORA-00907: missing right parenthesis
SQL> SELECT 1 FROM dual WHERE EXISTS (SELECT 1 FROM dual);
1
----------
1
集合中的order by子句没有任何意义,因此错误(肯定是无用的消息)。
答案 1 :(得分:3)
将其改写为
delete from NPEA.tnpe00_all WHERE NPEA.tnpe00_all.t_doc IN (
SELECT NPEA.tnpe05_doc.n_doc
from NPEA.tnpe05_doc
WHERE NPEA.tnpe05_doc.n_prt is null and NPEA.tnpe05_doc.n_can = 4
)
它做了同样的工作但是以更明显的方式
答案 2 :(得分:0)
delete from NPEA.tnpe00_all
where EXISTS
(select 1
from NPEA.tnpe05_doc, NPEA.tnpe00_all
where NPEA.tnpe05_doc.n_doc = NPEA.tnpe00_all.t_doc
and NPEA.tnpe05_doc.n_prt is null
and NPEA.tnpe05_doc.n_can = 4)
这是有用的,请尝试这个