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

Tilføj IF ELSE-erklæring

Med hensyn til, hvordan man håndterer denne slags syntaksproblemer som nybegynder, foreslår jeg, at du øver dig i at forenkle det ned til det mindst mulige eksempel, så du ikke bliver distraheret af join-logikken.

For eksempel kan du hurtigt teste dette og se, at det ikke virker :

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

som fejler med

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

fordi den open rc for select syntaks skal være en enkelt sætning og kan ikke opdeles med betinget logik.

Bemærk, hvordan der ikke er nogen create function , parametre eller joinforbindelser osv. for at komplicere tingene. Du kan tilføje alle dem igen, når du har fået rettet syntaksen ud. case sætningssyntaks er her . (Bemærk, at der er et par forskellige typer case .) Det skal være enten

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

eller tilsvarende ved hjælp af if :

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


  1. Mysql - LIMIT efter procent?

  2. Hvordan kan jeg tjekke for dubletter, før jeg indsætter i en tabel, når jeg indsætter ved at vælge

  3. Spor signaler med en signalbehandlingsdatamodel

  4. cx_Oracle:Brug af PL/SQL RECORD-typer som argumenter til lagrede procedurer