Con respecto a cómo lidiar con este tipo de problema de sintaxis como principiante, le sugiero que practique simplificándolo hasta el ejemplo más pequeño posible, para que no se distraiga con la lógica de unión.
Por ejemplo, puede probar esto rápidamente y ver que no funcionará :
declare
rc sys_refcursor;
begin
open rc for
case
when 1 = 1 then select * from dual -- not valid
end;
end;
que falla con
ORA-06550: line 6, column 29:
PLS-00103: Encountered the symbol "SELECT" when expecting one of the following: ...
porque el open rc for select
la sintaxis tiene que ser una declaración única y no se puede dividir con lógica condicional.
Observe cómo no hay create function
, parámetros o uniones, etc. para complicar las cosas. Puede volver a agregarlos todos una vez que haya aclarado la sintaxis. El case
la sintaxis de la declaración es aquí
. (Tenga en cuenta que hay un par de tipos diferentes de case
.) Tiene que ser cualquiera
declare
rc sys_refcursor;
begin
case
when 1 = 1 then
open rc for select * from dual;
end case;
end;
o el equivalente usando if
:
declare
rc sys_refcursor;
begin
if 1 = 1 then
open rc for select * from dual;
end if;
end;