Styl kodowania i niepotrzebne nawiasy zagnieżdżone sprawiają, że jest to naprawdę trudne do odczytania i zinterpretowania. Ale pomaga również to, że w przeciwieństwie do niektórych komentarzy, ORA-00907 nie zawsze oznacza nieparzystą liczbę nawiasów, może wskazywać na bardziej ogólny błąd składni, który spowodował, że parser się wyskoczył. W tym przypadku nie jest to zbyt pomocne.
Problemem jest order by
klauzula w przedostatnim wierszu, w podzapytaniu, z którym porównujesz, z 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
Ostateczna kolejność jest oczywiście dozwolona, ale w tym podzapytaniu tak nie jest. Więc to powinno się skończyć:
...
TEST.TS_TYPE = 'LR-SCENARIO')AND TEST.TS_TEST_ID =145965)
ORDER BY TESTCYCL.TC_TESTCYCL_ID,STEP.ST_STEP_ORDER
Nie mogę tego przetestować, ponieważ nie mam twojego schematu, ale prostsze demo może pomóc zademonstrować:
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"
Usuwanie wewnętrznego order by
:
select d1.dummy
from dual d1
where d1.dummy in (
select dummy
from dual d2
)
order by d1.dummy;
DUMMY
-----
X
Oczekuje, że zobaczy )
zamiast tego order by
, więc błąd ma sens, gdy już wiesz, co jest nie tak; ale tak naprawdę nie pomaga to zawęzić.
Nawiasem mówiąc, jest to wspomniane w dokumencie pomocy Oracle 731577.1:
Pobieranie ORA-00907: missing right parenthesis
podczas korzystania z ORDER BY
klauzula w podzapytaniu. Gdy ORDER BY
klauzula została usunięta, zapytanie działa bez błędów.
...
Jest to oczekiwane zachowanie zgodnie z błędem 4944718ORDER BY
w podzapytaniu nie powinno działać, ponieważ kolejność wierszy jest przekazywana do zapytania zewnętrznego i nie ma żadnego wpływu.
Jest dozwolony/ignorowany w widoku wbudowanym, ale nie w zagnieżdżonym podzapytaniu. (Chociaż mogą istnieć wyjątki, w których nadal nie zgłasza błędu...)