Oracle
 sql >> Datenbank >  >> RDS >> Oracle

ORDER BY mit innerer Abfrage, wobei ORA-00907 fehlende rechte Klammer ergibt

Der Codierungsstil und unnötige verschachtelte Klammern machen dies wirklich schwer zu lesen und zu interpretieren. Aber es hilft auch, dass ein ORA-00907 im Gegensatz zu einigen Kommentaren nicht immer eine ungerade Anzahl von Klammern bedeutet, sondern auf einen allgemeineren Syntaxfehler hinweisen kann, der dazu geführt hat, dass der Parser ausgestiegen ist. In diesem Fall ist es nicht sehr hilfreich.

Das Problem ist die order by -Klausel in der vorletzten Zeile innerhalb der Unterabfrage, mit der Sie vergleichen, mit 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

Die endgültige Reihenfolge ist offensichtlich erlaubt, aber in dieser Unterabfrage nicht. Es sollte also enden:

...
TEST.TS_TYPE = 'LR-SCENARIO')AND TEST.TS_TEST_ID =145965)
ORDER BY TESTCYCL.TC_TESTCYCL_ID,STEP.ST_STEP_ORDER

Ich kann das nicht testen, da ich Ihr Schema nicht habe, aber eine einfachere Demo könnte helfen, dies zu demonstrieren:

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"

Entfernen des inneren order by :

select d1.dummy
from dual d1
where d1.dummy in (
  select dummy
  from dual d2
)
order by d1.dummy;

DUMMY
-----
X     

Es wird ein ) erwartet statt dessen order by , also macht der Fehler einen Sinn, sobald Sie wissen, was er falsch ist; aber es hilft dir nicht wirklich, es einzugrenzen.

Darauf wird übrigens im Oracle-Supportdokument 731577.1 verwiesen:

Abrufen von ORA-00907: missing right parenthesis bei Verwendung eines ORDER BY Klausel in einer Unterabfrage. Wenn der ORDER BY -Klausel entfernt wird, wird die Abfrage ohne Fehler ausgeführt.

...
Dies ist das erwartete Verhalten gemäß Bug 4944718ORDER BY in einer Unterabfrage sollte nicht funktionieren, da die Reihenfolge der Zeilen an die äußere Abfrage weitergegeben wird und keine Auswirkungen hat.

Es ist in einer Inline-Ansicht erlaubt/ignoriert, aber nicht in einer verschachtelten Unterabfrage. (Obwohl es Ausnahmen geben kann, bei denen es immer noch keinen Fehler auslöst ...)