Kodningsstilen och onödiga kapslade parenteser gör det här väldigt svårt att läsa och tolka. Men det hjälper också att, i motsats till vissa kommentarer, betyder en ORA-00907 inte alltid ett ojämnt antal parenteser, det kan indikera ett mer allmänt syntaxfel som har fått parsern att lösa sig. I det här fallet är det inte särskilt användbart.
Problemet är order by
sats på den näst sista raden i underfrågan du jämför 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 slutliga beställningen är givetvis tillåten, men i den underfrågan är den inte det. Så det borde sluta:
...
TEST.TS_TYPE = 'LR-SCENARIO')AND TEST.TS_TEST_ID =145965)
ORDER BY TESTCYCL.TC_TESTCYCL_ID,STEP.ST_STEP_ORDER
Jag kan inte testa det eftersom jag inte har ditt schema, men en enklare demo kan hjälpa dig att visa:
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"
Ta bort den inre order by
:
select d1.dummy
from dual d1
where d1.dummy in (
select dummy
from dual d2
)
order by d1.dummy;
DUMMY
-----
X
Den förväntar sig att se en )
istället för den order by
, så felet är vettigt, när du väl vet vad det är för fel; men det hjälper dig inte riktigt att begränsa det.
Detta hänvisas för övrigt till i Oracles supportdokument 731577.1:
Får
ORA-00907: missing right parenthesis
när du använder enORDER BY
klausul i en underfråga. NärORDER BY
klausul tas bort och frågan körs utan fel....
Detta är förväntat beteende per bugg 4944718ORDER BY
i en underfråga borde inte fungera, eftersom ordningen på raderna skickas till den yttre frågan och inte har någon inverkan.
Det är tillåtet/ignoreras i en inlinevy, men inte i en kapslad underfråga. (Även om det kan finnas undantag där det fortfarande inte ger något fel...)