Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Adicionar instrução SE MAIS


Sobre como lidar com esse tipo de problema de sintaxe como iniciante, sugiro que você pratique a simplificação até o menor exemplo possível, para não se distrair com a lógica de junção.

Por exemplo, você pode testar isso rapidamente e ver que não funcionará :
declare
    rc sys_refcursor;
begin
    open rc for
        case
            when 1 = 1 then select * from dual  -- not valid
        end;
end;

que falha com
ORA-06550: line 6, column 29:
PLS-00103: Encountered the symbol "SELECT" when expecting one of the following: ...

porque o open rc for select sintaxe tem que ser uma única instrução e não pode ser dividida com lógica condicional.

Observe como não há create function , parâmetros ou junções etc para complicar as coisas. Você pode adicionar todos eles de volta assim que tiver a sintaxe corrigida. O case a sintaxe da instrução é aqui . (Observe que existem alguns tipos diferentes de case .) Precisa ser ou
declare
    rc sys_refcursor;
begin
    case
        when 1 = 1 then
            open rc for select * from dual;
    end case;
end;

ou o equivalente usando if :
declare
    rc sys_refcursor;
begin
    if 1 = 1 then
        open rc for select * from dual;
    end if;
end;