Le style de codage et les crochets imbriqués inutiles rendent cela très difficile à lire et à interpréter. Mais cela aide également que, contrairement à certains commentaires, un ORA-00907 ne signifie pas toujours un nombre impair de parenthèses, il peut indiquer une erreur de syntaxe plus générale qui a provoqué le renflouement de l'analyseur. Dans ce cas, ce n'est pas très utile.
Le problème est le order by
clause sur l'avant-dernière ligne, dans la sous-requête que vous comparez avec 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
Le classement final est évidemment autorisé, mais dans cette sous-requête, il ne l'est pas. Cela devrait donc se terminer :
...
TEST.TS_TYPE = 'LR-SCENARIO')AND TEST.TS_TEST_ID =145965)
ORDER BY TESTCYCL.TC_TESTCYCL_ID,STEP.ST_STEP_ORDER
Je ne peux pas tester cela car je n'ai pas votre schéma, mais une démonstration plus simple pourrait aider à démontrer :
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"
Suppression du order by
intérieur :
select d1.dummy
from dual d1
where d1.dummy in (
select dummy
from dual d2
)
order by d1.dummy;
DUMMY
-----
X
Il s'attend à voir un )
au lieu de ce order by
, donc l'erreur a un sens, une fois que vous savez ce qui ne va pas ; mais cela ne vous aide pas vraiment à le réduire.
Incidemment, ceci est référencé dans le document de support Oracle 731577.1 :
Obtention de
ORA-00907: missing right parenthesis
lors de l'utilisation d'unORDER BY
clause dans une sous-requête. Lorsque leORDER BY
la clause est supprimée, la requête s'exécute sans erreur....
Ceci est un comportement attendu par le bogue 4944718ORDER BY
dans une sous-requête ne devrait pas fonctionner, car l'ordre des lignes est passé à la requête externe et n'a aucun impact.
Il est autorisé/ignoré dans une vue en ligne, mais pas dans une sous-requête imbriquée. (Bien qu'il puisse y avoir des exceptions où il ne génère toujours pas d'erreur...)