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 parenthesisnär du använder enORDER BYklausul i en underfråga. NärORDER BYklausul tas bort och frågan körs utan fel....
Detta är förväntat beteende per bugg 4944718ORDER BYi 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...)