Oracle
 sql >> Database >  >> RDS >> Oracle

Aggiungi IF ELSE istruzione

Per quanto riguarda come affrontare questo tipo di problema di sintassi come principiante, ti suggerisco di esercitarti a semplificarlo fino al più piccolo esempio possibile, in modo da non essere distratto dalla logica di join.

Ad esempio, puoi testarlo rapidamente e vedere che non funzionerà :

declare
    rc sys_refcursor;
begin
    open rc for
        case
            when 1 = 1 then select * from dual  -- not valid
        end;
end;

che non riesce con

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

perché open rc for select la sintassi deve essere una singola istruzione e non può essere suddivisa con la logica condizionale.

Nota come non esiste create function , parametri o join ecc. per complicare le cose. Puoi aggiungerli tutti una volta che hai raddrizzato la sintassi. Il case la sintassi dell'istruzione è qui . (Nota che ci sono un paio di diversi tipi di case .) Deve essere uno dei due

declare
    rc sys_refcursor;
begin
    case
        when 1 = 1 then
            open rc for select * from dual;
    end case;
end;

o l'equivalente usando if :

declare
    rc sys_refcursor;
begin
    if 1 = 1 then
        open rc for select * from dual;
    end if;
end;