Kodningsstilen og unødvendige indlejrede parenteser gør dette virkelig svært at læse og fortolke. Men det hjælper også, at i modsætning til nogle kommentarer betyder en ORA-00907 ikke altid et ulige antal parenteser, det kan indikere en mere generel syntaksfejl, der har fået parseren til at redde ud. I dette tilfælde er det ikke særlig nyttigt.
Problemet er order by
klausul på næstsidste linje i den underforespørgsel, du sammenligner med med 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
Den endelige bestilling er naturligvis tilladt, men i den underforespørgsel er det ikke. Så det skulle ende:
...
TEST.TS_TYPE = 'LR-SCENARIO')AND TEST.TS_TEST_ID =145965)
ORDER BY TESTCYCL.TC_TESTCYCL_ID,STEP.ST_STEP_ORDER
Jeg kan ikke teste det, da jeg ikke har dit skema, men en enklere demo kan måske hjælpe med at demonstrere:
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"
Fjerner den indre order by
:
select d1.dummy
from dual d1
where d1.dummy in (
select dummy
from dual d2
)
order by d1.dummy;
DUMMY
-----
X
Den forventer at se en )
i stedet for den order by
, så fejlen giver mening, når du først ved, hvad der er galt; men det hjælper dig ikke rigtig med at indsnævre det.
Dette refereres i øvrigt til i Oracle supportdokument 731577.1:
Henter ORA-00907: missing right parenthesis
når du bruger en ORDER BY
klausul i en underforespørgsel. Når ORDER BY
klausulen fjernes, forespørgslen kører uden fejl.
...
Dette er forventet adfærd pr. fejl 4944718ORDER BY
i en underforespørgsel burde ikke virke, da rækkefølgen af rækkerne overføres til den ydre forespørgsel og ikke har nogen indflydelse.
Det er tilladt/ignoreret i en indlejret visning, men ikke i en indlejret underforespørgsel. (Selvom der kan være undtagelser, hvor det stadig ikke giver en fejl...)