sql >> Databasteknik >  >> RDS >> Oracle

Lägg till IF ELSE-satsen

Angående hur man hanterar den här typen av syntaxproblem som nybörjare, föreslår jag att du övar dig på att förenkla det till minsta möjliga exempel, så att du inte distraheras av join-logiken.

Du kan till exempel snabbt testa detta och se att det inte fungerar :

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

som misslyckas med

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

eftersom open rc for select syntax måste vara en enda sats och kan inte delas upp med villkorlig logik.

Lägg märke till hur det inte finns någon create function , parametrar eller kopplingar etc för att komplicera saker. Du kan lägga till alla dessa igen när du har rätat ut syntaxen. case satssyntaxen är här . (Lägg märke till att det finns ett par olika typer av case .) Det måste vara antingen

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

eller motsvarande med if :

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


  1. Oracle:hur man infogar om en rad inte finns

  2. 4 sätt lagerdatabaser gynnar detaljhandeln

  3. PHP, SQL limit-fråga efter php-variabel

  4. Hur man ändrar standarddatabaspostprofilen för en användare i SQL Server (T-SQL)