sql >> Base de Datos >  >> RDS >> Oracle

ORDER BY con consulta interna, dando ORA-00907 sin paréntesis derecho

El estilo de codificación y los corchetes anidados innecesarios hacen que esto sea realmente difícil de leer e interpretar. Pero también ayuda que, contrariamente a algunos comentarios, un ORA-00907 no siempre significa un número impar de paréntesis, puede indicar un error de sintaxis más general que provocó que el analizador se detuviera. En este caso no es muy útil.

El problema es el order by cláusula en la penúltima línea, dentro de la subconsulta con la que está comparando 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

La ordenación final obviamente está permitida, pero en esa subconsulta no lo está. Entonces debería terminar:

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

No puedo probar eso porque no tengo su esquema, pero una demostración más simple podría ayudar a demostrar:

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"

Eliminando el order by :

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

DUMMY
-----
X     

Está esperando ver un ) en lugar de eso order by , por lo que el error tiene algún sentido, una vez que sepa qué es lo que está mal; pero en realidad no te ayuda a reducirlo.

Por cierto, esto se menciona en el documento de soporte de Oracle 731577.1:

Obteniendo ORA-00907: missing right parenthesis cuando se usa un ORDER BY cláusula en una subconsulta. Cuando el ORDER BY se elimina la cláusula, la consulta se ejecuta sin error.

...
Este es el comportamiento esperado según el error 4944718ORDER BY en una subconsulta no debería funcionar, ya que el orden de las filas se pasa a la consulta externa y no tiene impacto.

Se permite/ignora en una vista en línea, pero no en una subconsulta anidada. (Aunque puede haber excepciones en las que todavía no arroja un error...)