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

BESTIL AF med indre forespørgsel, hvilket giver ORA-00907 manglende højre parentes

Kodningsstilen og unødvendige indlejrede parenteser gør dette virkelig svært at læse og fortolke. Men det hjælper også, at i modsætning til nogle kommentarer betyder en ORA-00907 ikke altid et ulige antal parenteser, det kan indikere en mere generel syntaksfejl, der har fået parseren til at redde ud. I dette tilfælde er det ikke særlig nyttigt.

Problemet er order by klausul på næstsidste linje i den underforespørgsel, du sammenligner med med 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

Den endelige bestilling er naturligvis tilladt, men i den underforespørgsel er det ikke. Så det skulle ende:

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

Jeg kan ikke teste det, da jeg ikke har dit skema, men en enklere demo kan måske hjælpe med at demonstrere:

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"

Fjerner den indre order by :

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

DUMMY
-----
X     

Den forventer at se en ) i stedet for den order by , så fejlen giver mening, når du først ved, hvad der er galt; men det hjælper dig ikke rigtig med at indsnævre det.

Dette refereres i øvrigt til i Oracle supportdokument 731577.1:

Henter ORA-00907: missing right parenthesis når du bruger en ORDER BY klausul i en underforespørgsel. Når ORDER BY klausulen fjernes, forespørgslen kører uden fejl.

...
Dette er forventet adfærd pr. fejl 4944718ORDER BY i en underforespørgsel burde ikke virke, da rækkefølgen af ​​rækkerne overføres til den ydre forespørgsel og ikke har nogen indflydelse.

Det er tilladt/ignoreret i en indlejret visning, men ikke i en indlejret underforespørgsel. (Selvom der kan være undtagelser, hvor det stadig ikke giver en fejl...)




  1. Sådan aktiveres langsomme forespørgselslogfiler i AWS RDS MySQL

  2. MySQL-sharding nærmer sig?

  3. Bedste måder at reparere korrupt InnoDB-tabel i MySQL

  4. Samlet funktion i en SQL-opdateringsforespørgsel?