Jeśli chodzi o to, jak radzić sobie z tego rodzaju problemem składni jako początkujący, sugeruję, abyś poćwiczył upraszczanie go do najmniejszego możliwego przykładu, aby nie rozpraszać się logiką łączenia.
Możesz na przykład szybko to przetestować i zobaczyć, że nie zadziała :
declare
rc sys_refcursor;
begin
open rc for
case
when 1 = 1 then select * from dual -- not valid
end;
end;
co nie powiedzie się z
ORA-06550: line 6, column 29:
PLS-00103: Encountered the symbol "SELECT" when expecting one of the following: ...
ponieważ open rc for select
składnia musi być pojedynczą instrukcją i nie może być podzielona za pomocą logiki warunkowej.
Zwróć uwagę, że nie ma create function
, parametry lub złączenia itp., aby skomplikować sprawy. Możesz dodać je wszystkie z powrotem, gdy już wyprostujesz składnię. case
składnia instrukcji to tutaj
. (Zauważ, że istnieje kilka różnych rodzajów case
.) Musi być albo
declare
rc sys_refcursor;
begin
case
when 1 = 1 then
open rc for select * from dual;
end case;
end;
lub odpowiednik przy użyciu if
:
declare
rc sys_refcursor;
begin
if 1 = 1 then
open rc for select * from dual;
end if;
end;