Wat betreft hoe je als beginner met dit soort syntaxisproblemen om kunt gaan, raad ik je aan om te oefenen met het vereenvoudigen tot het kleinst mogelijke voorbeeld, zodat je niet wordt afgeleid door de join-logica.
U kunt dit bijvoorbeeld snel testen en zien dat het niet werkt :
declare
rc sys_refcursor;
begin
open rc for
case
when 1 = 1 then select * from dual -- not valid
end;
end;
wat mislukt met
ORA-06550: line 6, column 29:
PLS-00103: Encountered the symbol "SELECT" when expecting one of the following: ...
omdat de open rc for select
syntaxis moet een enkele instructie zijn en kan niet worden opgesplitst met voorwaardelijke logica.
Merk op dat er geen create function
is , parameters of joins enz. om dingen te compliceren. Je kunt ze allemaal weer toevoegen zodra je de syntaxis hebt rechtgezet. De case
syntaxis van de instructie is hier
. (Merk op dat er een aantal verschillende soorten case
zijn .) Het moet een van beide zijn
declare
rc sys_refcursor;
begin
case
when 1 = 1 then
open rc for select * from dual;
end case;
end;
of het equivalent met if
:
declare
rc sys_refcursor;
begin
if 1 = 1 then
open rc for select * from dual;
end if;
end;