Mengenai cara mengatasi masalah sintaks seperti ini sebagai pemula, saya sarankan Anda berlatih menyederhanakannya ke contoh terkecil, sehingga Anda tidak terganggu oleh logika join.
Misalnya, Anda dapat dengan cepat menguji ini dan melihat bahwa itu tidak akan berhasil :
declare
rc sys_refcursor;
begin
open rc for
case
when 1 = 1 then select * from dual -- not valid
end;
end;
yang gagal dengan
ORA-06550: line 6, column 29:
PLS-00103: Encountered the symbol "SELECT" when expecting one of the following: ...
karena open rc for select
sintaks harus berupa pernyataan tunggal dan tidak dapat dipisahkan dengan logika kondisional.
Perhatikan bagaimana tidak ada create function
, parameter atau bergabung dll untuk memperumit masalah. Anda dapat menambahkan semua itu kembali setelah sintaks Anda diluruskan. case
sintaks pernyataan adalah di sini
. (Perhatikan bahwa ada beberapa jenis case
.) Harus berupa
declare
rc sys_refcursor;
begin
case
when 1 = 1 then
open rc for select * from dual;
end case;
end;
atau yang setara menggunakan if
:
declare
rc sys_refcursor;
begin
if 1 = 1 then
open rc for select * from dual;
end if;
end;