Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

ORDER BY dengan kueri dalam, memberikan ORA-00907 tanda kurung kanan yang hilang

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 menggunakan ORDER BY klausa dalam subquery. Ketika ORDER 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...)




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Memilih baris kedua dari tabel menggunakan rownum

  2. Ekspor Hasil Permintaan Oracle ke File HTML saat menggunakan SQLcl

  3. Jumlah baris Oracle tabel dengan count(*) vs NUM_ROWS dari DBA_TABLES

  4. Oracle:keunikan selektif indeks berbasis fungsi

  5. Mewakili alamat IPv4/IPv6 di Oracle