Стилът на кодиране и ненужните вложени скоби правят това наистина трудно за четене и интерпретиране. Но също така помага, че противно на някои коментари, 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
в подзаявка не трябва да работи, тъй като редът на редовете се предава на външната заявка и няма влияние.
Допуска се/игнорира се във вграден изглед, но не и във вложена подзаявка. (Въпреки че може да има изключения, при които пак не извежда грешка...)