sql >> Database >  >> RDS >> Oracle

ORDER BY met Inner query, waardoor ORA-00907 rechter haakje ontbreekt

De coderingsstijl en onnodige geneste haakjes maken dit echt moeilijk te lezen en te interpreteren. Maar het helpt ook dat, in tegenstelling tot sommige opmerkingen, een ORA-00907 niet altijd een oneven aantal haakjes betekent, het kan wijzen op een meer algemene syntaxisfout die ervoor heeft gezorgd dat de parser uitviel. In dit geval is het niet erg nuttig.

Het probleem is de order by clausule op de voorlaatste regel, binnen de subquery waarmee u vergelijkt met 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

De uiteindelijke volgorde is uiteraard toegestaan, maar in die subquery niet. Dus het zou moeten eindigen:

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

Ik kan dat niet testen omdat ik je schema niet heb, maar een eenvoudigere demo kan helpen om het volgende aan te tonen:

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"

De binnenste order by verwijderen :

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

DUMMY
-----
X     

Het verwacht een ) . te zien in plaats van dat order by , dus de fout is wel logisch, als je eenmaal weet wat er mis is; maar het helpt je niet echt om het te beperken.

Overigens wordt hiernaar verwezen in Oracle ondersteuningsdocument 731577.1:

ORA-00907: missing right parenthesis bij gebruik van een ORDER BY clausule in een subquery. Wanneer de ORDER BY clausule is verwijderd, wordt de query uitgevoerd zonder fouten.

...
Dit is het verwachte gedrag per bug 4944718ORDER BY in een subquery zou niet moeten werken, omdat de volgorde van de rijen wordt doorgegeven aan de buitenste query en geen invloed heeft.

Het is toegestaan/genegeerd in een inline-weergave, maar niet in een geneste subquery. (Hoewel er uitzonderingen kunnen zijn waarbij het nog steeds geen foutmelding geeft...)




  1. Top 5 tijdrovende SQL-query's in Oracle

  2. 4 manieren om de definitie van een weergave te krijgen met Transact-SQL

  3. Hoe epoch naar mySQL-tijdstempel in JAVA te converteren

  4. MariaDB GROUP_CONCAT()