Angående hur man hanterar den här typen av syntaxproblem som nybörjare, föreslår jag att du övar dig på att förenkla det till minsta möjliga exempel, så att du inte distraheras av join-logiken.
Du kan till exempel snabbt testa detta och se att det inte fungerar :
declare
rc sys_refcursor;
begin
open rc for
case
when 1 = 1 then select * from dual -- not valid
end;
end;
som misslyckas med
ORA-06550: line 6, column 29:
PLS-00103: Encountered the symbol "SELECT" when expecting one of the following: ...
eftersom open rc for select
syntax måste vara en enda sats och kan inte delas upp med villkorlig logik.
Lägg märke till hur det inte finns någon create function
, parametrar eller kopplingar etc för att komplicera saker. Du kan lägga till alla dessa igen när du har rätat ut syntaxen. case
satssyntaxen är här
. (Lägg märke till att det finns ett par olika typer av case
.) Det måste vara antingen
declare
rc sys_refcursor;
begin
case
when 1 = 1 then
open rc for select * from dual;
end case;
end;
eller motsvarande med if
:
declare
rc sys_refcursor;
begin
if 1 = 1 then
open rc for select * from dual;
end if;
end;