Oracle
 sql >> Database >  >> RDS >> Oracle

ORDINA PER con query interna, fornendo ORA-00907 parentesi a destra mancante

Lo stile di codifica e le parentesi nidificate non necessarie lo rendono davvero difficile da leggere e interpretare. Ma aiuta anche il fatto che, contrariamente ad alcuni commenti, un ORA-00907 non significa sempre un numero dispari di parentesi, può indicare un errore di sintassi più generale che ha causato il salvataggio del parser. In questo caso non è molto utile.

Il problema è il order by clausola sulla penultima riga, all'interno della sottoquery che stai confrontando con 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

L'ordinamento finale è ovviamente consentito, ma in quella subquery non lo è. Quindi dovrebbe finire:

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

Non posso testarlo perché non ho il tuo schema, ma una demo più semplice potrebbe aiutare a dimostrare:

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"

Rimozione dell'order by interno :

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

DUMMY
-----
X     

Si aspetta di vedere un ) invece di order by , quindi l'errore ha un senso, una volta che sai cosa non va; ma non ti aiuta davvero a restringere il campo.

Per inciso, questo è indicato nel documento di supporto Oracle 731577.1:

Ottenere ORA-00907: missing right parenthesis quando si utilizza un ORDER BY clausola in una sottoquery. Quando il ORDER BY la clausola viene rimossa la query viene eseguita senza errori.

...
Questo è un comportamento previsto per Bug 4944718ORDER BY in una sottoquery non dovrebbe funzionare, poiché l'ordine delle righe viene passato alla query esterna e non ha alcun impatto.

È consentito/ignorato in una vista in linea, ma non in una sottoquery nidificata. (Anche se potrebbero esserci delle eccezioni in cui non genera ancora un errore...)