Gaya pengkodean dan tanda kurung bersarang yang tidak perlu membuat ini sangat sulit untuk dibaca dan ditafsirkan. Tetapi itu juga membantu bahwa, bertentangan dengan beberapa komentar, ORA-00907 tidak selalu berarti jumlah tanda kurung yang tidak merata, ini dapat menunjukkan kesalahan sintaks yang lebih umum yang menyebabkan parser keluar. Dalam hal ini tidak terlalu membantu.
Masalahnya adalah order by
klausa pada baris kedua dari belakang, di dalam subkueri yang Anda bandingkan dengan 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
Pemesanan terakhir jelas diperbolehkan, tetapi dalam subquery itu tidak. Jadi itu harus berakhir:
...
TEST.TS_TYPE = 'LR-SCENARIO')AND TEST.TS_TEST_ID =145965)
ORDER BY TESTCYCL.TC_TESTCYCL_ID,STEP.ST_STEP_ORDER
Saya tidak dapat mengujinya karena saya tidak memiliki skema Anda, tetapi demo yang lebih sederhana mungkin dapat membantu menunjukkan:
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"
Menghapus order by
bagian dalam :
select d1.dummy
from dual d1
where d1.dummy in (
select dummy
from dual d2
)
order by d1.dummy;
DUMMY
-----
X
Diharapkan untuk melihat )
alih-alih order by
, jadi kesalahannya masuk akal, setelah Anda tahu apa yang salah; tapi itu tidak benar-benar membantu Anda mempersempitnya.
Kebetulan, ini dirujuk dalam dokumen dukungan Oracle 731577.1:
Mendapatkan
ORA-00907: missing right parenthesis
saat menggunakanORDER BY
klausa dalam subquery. KetikaORDER BY
klausa dihapus, kueri berjalan tanpa kesalahan....
Ini adalah perilaku yang diharapkan per Bug 4944718ORDER BY
dalam subkueri seharusnya tidak berfungsi, karena urutan baris diteruskan ke kueri luar dan tidak berdampak.
Itu diperbolehkan/diabaikan dalam tampilan sebaris, tetapi tidak dalam subkueri bersarang. (Meskipun mungkin ada pengecualian di mana itu masih tidak menimbulkan kesalahan...)