sql >> Databasteknik >  >> RDS >> Oracle

BESTÄLL AV med inre fråga, vilket ger ORA-00907 saknad höger parentes

Kodningsstilen och onödiga kapslade parenteser gör det här väldigt svårt att läsa och tolka. Men det hjälper också att, i motsats till vissa kommentarer, betyder en ORA-00907 inte alltid ett ojämnt antal parenteser, det kan indikera ett mer allmänt syntaxfel som har fått parsern att lösa sig. I det här fallet är det inte särskilt användbart.

Problemet är order by sats på den näst sista raden i underfrågan du jämför 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 slutliga beställningen är givetvis tillåten, men i den underfrågan är den inte det. Så det borde sluta:

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

Jag kan inte testa det eftersom jag inte har ditt schema, men en enklare demo kan hjälpa dig att visa:

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"

Ta bort den inre order by :

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

DUMMY
-----
X     

Den förväntar sig att se en ) istället för den order by , så felet är vettigt, när du väl vet vad det är för fel; men det hjälper dig inte riktigt att begränsa det.

Detta hänvisas för övrigt till i Oracles supportdokument 731577.1:

Får ORA-00907: missing right parenthesis när du använder en ORDER BY klausul i en underfråga. När ORDER BY klausul tas bort och frågan körs utan fel.

...
Detta är förväntat beteende per bugg 4944718ORDER BY i en underfråga borde inte fungera, eftersom ordningen på raderna skickas till den yttre frågan och inte har någon inverkan.

Det är tillåtet/ignoreras i en inlinevy, men inte i en kapslad underfråga. (Även om det kan finnas undantag där det fortfarande inte ger något fel...)




  1. Hur man ändrar bakgrundsfärg för formulärrubriker i Access 2016

  2. Now() utan tidszon

  3. Fel vid användning av mönstermatchning som inte liknar någon annan i PostgreSQL

  4. Hur man hittar ett listobjekt på en specificerad position i MySQL