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...)