Oracle
 sql >> Baza danych >  >> RDS >> Oracle

ORDER BY z zapytaniem wewnętrznym, z brakiem prawego nawiasu ORA-00907

Styl kodowania i niepotrzebne nawiasy zagnieżdżone sprawiają, że jest to naprawdę trudne do odczytania i zinterpretowania. Ale pomaga również to, że w przeciwieństwie do niektórych komentarzy, ORA-00907 nie zawsze oznacza nieparzystą liczbę nawiasów, może wskazywać na bardziej ogólny błąd składni, który spowodował, że parser się wyskoczył. W tym przypadku nie jest to zbyt pomocne.

Problemem jest order by klauzula w przedostatnim wierszu, w podzapytaniu, z którym porównujesz, z 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

Ostateczna kolejność jest oczywiście dozwolona, ​​ale w tym podzapytaniu tak nie jest. Więc to powinno się skończyć:

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

Nie mogę tego przetestować, ponieważ nie mam twojego schematu, ale prostsze demo może pomóc zademonstrować:

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"

Usuwanie wewnętrznego order by :

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

DUMMY
-----
X     

Oczekuje, że zobaczy ) zamiast tego order by , więc błąd ma sens, gdy już wiesz, co jest nie tak; ale tak naprawdę nie pomaga to zawęzić.

Nawiasem mówiąc, jest to wspomniane w dokumencie pomocy Oracle 731577.1:

Pobieranie ORA-00907: missing right parenthesis podczas korzystania z ORDER BY klauzula w podzapytaniu. Gdy ORDER BY klauzula została usunięta, zapytanie działa bez błędów.

...
Jest to oczekiwane zachowanie zgodnie z błędem 4944718ORDER BY w podzapytaniu nie powinno działać, ponieważ kolejność wierszy jest przekazywana do zapytania zewnętrznego i nie ma żadnego wpływu.

Jest dozwolony/ignorowany w widoku wbudowanym, ale nie w zagnieżdżonym podzapytaniu. (Chociaż mogą istnieć wyjątki, w których nadal nie zgłasza błędu...)




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Dlaczego nie mogę używać zmiennych wiązania w instrukcjach DDL/SCL w dynamicznym SQL?

  2. co dzieje się w fazie przecięcia adop w R12.2

  3. Zmiana hasła SYS w RAC

  4. Monitor zmiany tabeli Oracle

  5. Upuszczanie połączonych użytkowników w bazie danych Oracle