sql >> Databáze >  >> RDS >> Oracle

ORDER BY s vnitřním dotazem, přičemž u ORA-00907 chybí pravá závorka

Styl kódování a nepotřebné vnořené závorky ztěžují čtení a interpretaci. Ale také pomáhá, že na rozdíl od některých komentářů ORA-00907 neznamená vždy lichý počet závorek, může to znamenat obecnější chybu syntaxe, která způsobila záchranu analyzátoru. V tomto případě to není příliš užitečné.

Problém je v order by klauzule na předposledním řádku v dílčím dotazu, se kterým porovnáváte, s in :

...
AND RUN.RN_RUN_ID in(Select max(RUN.RN_RUN_ID) From (((((((RELEASES JOIN RELEASE_CYCLES
...
TEST.TS_TYPE = 'LR-SCENARIO')AND TEST.TS_TEST_ID =145965
ORDER BY TESTCYCL.TC_TESTCYCL_ID)
ORDER BY TESTCYCL.TC_TESTCYCL_ID,STEP.ST_STEP_ORDER

Konečné řazení je samozřejmě povoleno, ale v tom dílčím dotazu není. Takže by to mělo skončit:

...
TEST.TS_TYPE = 'LR-SCENARIO')AND TEST.TS_TEST_ID =145965)
ORDER BY TESTCYCL.TC_TESTCYCL_ID,STEP.ST_STEP_ORDER

Nemohu to otestovat, protože nemám vaše schéma, ale jednodušší ukázka by mohla pomoci demonstrovat:

select d1.dummy
from dual d1
where d1.dummy in (
  select dummy
  from dual d2
  order by d2.dummy
)
order by d1.dummy;

Error at Command Line : 6 Column : 3
Error report -
SQL Error: ORA-00907: missing right parenthesis
00907. 00000 -  "missing right parenthesis"

Odstranění vnitřního order by :

select d1.dummy
from dual d1
where d1.dummy in (
  select dummy
  from dual d2
)
order by d1.dummy;

DUMMY
-----
X     

Očekává, že uvidí ) místo toho order by , takže chyba dává určitý smysl, jakmile víte, co je špatně; ale ve skutečnosti vám to nepomůže zúžit to.

Mimochodem, na toto se odkazuje v dokumentu podpory Oracle 731577.1:

Získává se ORA-00907: missing right parenthesis při použití ORDER BY klauzule v dílčím dotazu. Když ORDER BY klauzule je odstraněna, dotaz běží bez chyby.

...
Toto je očekávané chování podle chyby 4944718ORDER BY v poddotazu by nemělo fungovat, protože pořadí řádků je předáno vnějšímu dotazu a nemá žádný vliv.

Je povoleno/ignorováno ve vloženém zobrazení, ale ne ve vnořeném poddotazu. (I když mohou existovat výjimky, kdy stále nevyvolá chybu...)




  1. Přehled různých uzlů pomocného plánu v PostgreSQL

  2. Jak získat zřetelný seznam slov používaných ve všech záznamech pole pomocí MS SQL?

  3. Vertikální škálování PostgreSQL

  4. Postgresql změňte typ sloupce z int na UUID