Per quanto riguarda come affrontare questo tipo di problema di sintassi come principiante, ti suggerisco di esercitarti a semplificarlo fino al più piccolo esempio possibile, in modo da non essere distratto dalla logica di join.
Ad esempio, puoi testarlo rapidamente e vedere che non funzionerà :
declare
rc sys_refcursor;
begin
open rc for
case
when 1 = 1 then select * from dual -- not valid
end;
end;
che non riesce con
ORA-06550: line 6, column 29:
PLS-00103: Encountered the symbol "SELECT" when expecting one of the following: ...
perché open rc for select
la sintassi deve essere una singola istruzione e non può essere suddivisa con la logica condizionale.
Nota come non esiste create function
, parametri o join ecc. per complicare le cose. Puoi aggiungerli tutti una volta che hai raddrizzato la sintassi. Il case
la sintassi dell'istruzione è qui
. (Nota che ci sono un paio di diversi tipi di case
.) Deve essere uno dei due
declare
rc sys_refcursor;
begin
case
when 1 = 1 then
open rc for select * from dual;
end case;
end;
o l'equivalente usando if
:
declare
rc sys_refcursor;
begin
if 1 = 1 then
open rc for select * from dual;
end if;
end;