Oracle
 sql >> база данни >  >> RDS >> Oracle

ORDER BY с вътрешна заявка, като ORA-00907 липсва дясна скоба

Стилът на кодиране и ненужните вложени скоби правят това наистина трудно за четене и интерпретиране. Но също така помага, че противно на някои коментари, ORA-00907 не винаги означава нечетен брой скоби, може да показва по-обща синтактична грешка, която е накарала анализатора да се спаси. В този случай не е много полезно.

Проблемът е order by клауза на предпоследния ред, в рамките на подзаявката, с която сравнявате с 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

Окончателното подреждане очевидно е разрешено, но в тази подзаявка не е. Така че трябва да приключи:

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

Не мога да тествам това, тъй като нямам вашата схема, но по-проста демонстрация може да помогне да се демонстрира:

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"

Премахване на вътрешния order by :

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

DUMMY
-----
X     

Очаква се да види ) вместо този order by , така че грешката има някакъв смисъл, след като разберете какво не е наред; но всъщност не ви помага да стесните.

Между другото, това е посочено в документа за поддръжка на Oracle 731577.1:

Получаване на ORA-00907: missing right parenthesis когато използвате ORDER BY клауза в подзаявка. Когато ORDER BY клаузата е премахната, заявката се изпълнява без грешка.

...
Това е очаквано поведение за грешка 4944718ORDER BY в подзаявка не трябва да работи, тъй като редът на редовете се предава на външната заявка и няма влияние.

Допуска се/игнорира се във вграден изглед, но не и във вложена подзаявка. (Въпреки че може да има изключения, при които пак не извежда грешка...)




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Не мога да вляза в базата данни като SYS с Oracle SQL Developer

  2. Код за извикване на функция в пакет от C# и ODP.NET

  3. Форматирайте число като процент в Oracle

  4. Завръщане от Open World 2013

  5. Въздействие от дефинирането на колона VARCHAR2 с по-голяма дължина