Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

ORDER BY com consulta interna, dando ORA-00907 parêntese direito ausente


O estilo de codificação e os colchetes aninhados desnecessários tornam isso muito difícil de ler e interpretar. Mas também ajuda que, ao contrário de alguns comentários, um ORA-00907 nem sempre significa um número ímpar de parênteses, pode indicar um erro de sintaxe mais geral que fez o analisador falhar. Neste caso não é muito útil.

O problema é o order by cláusula na penúltima linha, dentro da subconsulta que você está comparando com 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

A ordenação final é obviamente permitida, mas nessa subconsulta não é. Então deve terminar:
...
TEST.TS_TYPE = 'LR-SCENARIO')AND TEST.TS_TEST_ID =145965)
ORDER BY TESTCYCL.TC_TESTCYCL_ID,STEP.ST_STEP_ORDER

Não posso testar isso porque não tenho seu esquema, mas uma demonstração mais simples pode ajudar a demonstrar:
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"

Removendo o order by interno :
select d1.dummy
from dual d1
where d1.dummy in (
  select dummy
  from dual d2
)
order by d1.dummy;

DUMMY
-----
X     

Ele espera ver um ) em vez de order by , então o erro faz algum sentido, uma vez que você saiba o que está errado; mas isso realmente não ajuda a reduzi-lo.

Aliás, isso é mencionado no documento de suporte da Oracle 731577.1:

Obtendo ORA-00907: missing right parenthesis ao usar um ORDER BY cláusula em uma subconsulta. Quando o ORDER BY cláusula for removida, a consulta será executada sem erros.

...
Este é o comportamento esperado pelo Bug 4944718ORDER BY em uma subconsulta não deve funcionar, pois a ordem das linhas é passada para a consulta externa e não tem impacto.

É permitido/ignorado em uma visualização inline, mas não em uma subconsulta aninhada. (Embora possa haver exceções em que ainda não gera um erro ...)