Pokud jde o to, jak se jako začátečník vypořádat s tímto druhem problému se syntaxí, navrhuji, abyste si procvičili jeho zjednodušení až na nejmenší možný příklad, abyste nebyli rozptylováni logikou spojení.
Můžete to například rychle otestovat a zjistit, že to nebude fungovat :
declare
rc sys_refcursor;
begin
open rc for
case
when 1 = 1 then select * from dual -- not valid
end;
end;
který selže s
ORA-06550: line 6, column 29:
PLS-00103: Encountered the symbol "SELECT" when expecting one of the following: ...
protože open rc for select
syntaxe musí být jeden příkaz a nemůže být rozdělena pomocí podmíněné logiky.
Všimněte si, že neexistuje žádná create function
, parametry nebo spojení atd., aby se věci zkomplikovaly. Jakmile budete mít syntaxi narovnanou, můžete je všechny přidat zpět. case
syntaxe příkazu je zde
. (Všimněte si, že existuje několik různých druhů case
.) Musí být buď
declare
rc sys_refcursor;
begin
case
when 1 = 1 then
open rc for select * from dual;
end case;
end;
nebo ekvivalentní pomocí if
:
declare
rc sys_refcursor;
begin
if 1 = 1 then
open rc for select * from dual;
end if;
end;