Почему этот запрос Oracle не работает? - PullRequest
2 голосов
/ 24 января 2012

У меня есть этот простой оператор 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"

Что не так сэто?

Ответы [ 3 ]

10 голосов
/ 24 января 2012

Нельзя использовать ORDER BY в предложении EXISTS:

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

Сортировка по предложению в наборе не имеет смысла, следовательно, ошибка (с допустимым бесполезным сообщением).

3 голосов
/ 24 января 2012

Перепишите его на

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
)

Это делает ту же самую работу, но намного более очевидным способом

0 голосов
/ 24 января 2012
    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)

Это работает, пожалуйста, попробуйте это

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...