sql >> Databáze >  >> RDS >> Oracle

Přidejte příkaz IF ELSE

Pokud jde o to, jak se jako začátečník vypořádat s tímto druhem problému se syntaxí, navrhuji, abyste si procvičili jeho zjednodušení až na nejmenší možný příklad, abyste nebyli rozptylováni logikou spojení.

Můžete to například rychle otestovat a zjistit, že to nebude fungovat :

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

který selže s

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

protože open rc for select syntaxe musí být jeden příkaz a nemůže být rozdělena pomocí podmíněné logiky.

Všimněte si, že neexistuje žádná create function , parametry nebo spojení atd., aby se věci zkomplikovaly. Jakmile budete mít syntaxi narovnanou, můžete je všechny přidat zpět. case syntaxe příkazu je zde . (Všimněte si, že existuje několik různých druhů case .) Musí být buď

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

nebo ekvivalentní pomocí if :

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


  1. Migrace databáze MySQL z Amazon RDS do DigitalOcean

  2. dostal vícepoložkovou sekvenci

  3. Nastavte aspnetcore s databází MySQL v dockeru

  4. Jaký je nejúčinnější způsob normalizace textu ze sloupce do tabulky?