De coderingsstijl en onnodige geneste haakjes maken dit echt moeilijk te lezen en te interpreteren. Maar het helpt ook dat, in tegenstelling tot sommige opmerkingen, een ORA-00907 niet altijd een oneven aantal haakjes betekent, het kan wijzen op een meer algemene syntaxisfout die ervoor heeft gezorgd dat de parser uitviel. In dit geval is het niet erg nuttig.
Het probleem is de order by
clausule op de voorlaatste regel, binnen de subquery waarmee u vergelijkt met 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
De uiteindelijke volgorde is uiteraard toegestaan, maar in die subquery niet. Dus het zou moeten eindigen:
...
TEST.TS_TYPE = 'LR-SCENARIO')AND TEST.TS_TEST_ID =145965)
ORDER BY TESTCYCL.TC_TESTCYCL_ID,STEP.ST_STEP_ORDER
Ik kan dat niet testen omdat ik je schema niet heb, maar een eenvoudigere demo kan helpen om het volgende aan te tonen:
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"
De binnenste order by
verwijderen :
select d1.dummy
from dual d1
where d1.dummy in (
select dummy
from dual d2
)
order by d1.dummy;
DUMMY
-----
X
Het verwacht een )
. te zien in plaats van dat order by
, dus de fout is wel logisch, als je eenmaal weet wat er mis is; maar het helpt je niet echt om het te beperken.
Overigens wordt hiernaar verwezen in Oracle ondersteuningsdocument 731577.1:
ORA-00907: missing right parenthesis
bij gebruik van eenORDER BY
clausule in een subquery. Wanneer deORDER BY
clausule is verwijderd, wordt de query uitgevoerd zonder fouten....
Dit is het verwachte gedrag per bug 4944718ORDER BY
in een subquery zou niet moeten werken, omdat de volgorde van de rijen wordt doorgegeven aan de buitenste query en geen invloed heeft.
Het is toegestaan/genegeerd in een inline-weergave, maar niet in een geneste subquery. (Hoewel er uitzonderingen kunnen zijn waarbij het nog steeds geen foutmelding geeft...)