Bezüglich des Umgangs mit dieser Art von Syntaxproblemen als Anfänger schlage ich vor, dass Sie üben, es bis zum kleinstmöglichen Beispiel zu vereinfachen, damit Sie nicht von der Verknüpfungslogik abgelenkt werden.
Sie können dies beispielsweise schnell testen und feststellen, dass es nicht funktioniert :
declare
rc sys_refcursor;
begin
open rc for
case
when 1 = 1 then select * from dual -- not valid
end;
end;
was mit
fehlschlägtORA-06550: line 6, column 29:
PLS-00103: Encountered the symbol "SELECT" when expecting one of the following: ...
weil die open rc for select
Syntax muss eine einzelne Anweisung sein und kann nicht mit bedingter Logik aufgeteilt werden.
Beachten Sie, dass es keine create function
gibt , Parameter oder Verknüpfungen usw., um die Dinge zu komplizieren. Sie können alle diese wieder hinzufügen, sobald Sie die Syntax geklärt haben. Der case
Die Syntax der Anweisung lautet hier
. (Beachten Sie, dass es ein paar verschiedene Arten von case
gibt .) Es muss eines von beiden sein
declare
rc sys_refcursor;
begin
case
when 1 = 1 then
open rc for select * from dual;
end case;
end;
oder das Äquivalent mit if
:
declare
rc sys_refcursor;
begin
if 1 = 1 then
open rc for select * from dual;
end if;
end;