Med hensyn til, hvordan man håndterer denne slags syntaksproblemer som nybegynder, foreslår jeg, at du øver dig i at forenkle det ned til det mindst mulige eksempel, så du ikke bliver distraheret af join-logikken.
For eksempel kan du hurtigt teste dette og se, at det ikke virker :
declare
rc sys_refcursor;
begin
open rc for
case
when 1 = 1 then select * from dual -- not valid
end;
end;
som fejler med
ORA-06550: line 6, column 29:
PLS-00103: Encountered the symbol "SELECT" when expecting one of the following: ...
fordi den open rc for select
syntaks skal være en enkelt sætning og kan ikke opdeles med betinget logik.
Bemærk, hvordan der ikke er nogen create function
, parametre eller joinforbindelser osv. for at komplicere tingene. Du kan tilføje alle dem igen, når du har fået rettet syntaksen ud. case
sætningssyntaks er her
. (Bemærk, at der er et par forskellige typer case
.) Det skal være enten
declare
rc sys_refcursor;
begin
case
when 1 = 1 then
open rc for select * from dual;
end case;
end;
eller tilsvarende ved hjælp af if
:
declare
rc sys_refcursor;
begin
if 1 = 1 then
open rc for select * from dual;
end if;
end;