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

udløser hvis andet

PL/SQL-syntaksen tillader ikke at inkludere SQL-sætninger i IF-sætningen.

Den korrekte fremgangsmåde er at adskille SELECT-sætningen og derefter teste for resultatet. Så det ville være:

create or replace trigger trig1 
after insert on table_1 
for each row 
declare
    v table2.column2%type;
begin
    select table2.column2 
    into v
    from table2 
    where table2.id= :new.id;

    if v is null
    then 
        update table2 
        set table2.column2 = :new.column1 
        where table2.id = :new.id; 
    end if; 
end trig1;

Bemærk, at dette ikke håndterer eksistensen af ​​flere rækker i table2 matcher kriterierne, eller der er faktisk ingen matchende rækker. Den klarer heller ikke låsning.

Husk også, at kode som denne ikke fungerer godt i flerbrugermiljøer. Det er derfor, jeg nævnte låsning. Du burde virkelig bruge procedurelogik til at håndtere den slags krav. Selvom det ofte er tilfældet med uudtænkte triggere, er den virkelige synder en dårlig datamodel. table2.column2 burde være blevet normaliseret ude af eksistens.




  1. Hvordan returnerer man data fra en MySQL-forespørgsel i en Flask-app?

  2. Er der sådan noget som en temp funktion?

  3. Lagring af statistiske data, skal jeg bruge DECIMAL, FLOAT eller DOUBLE?

  4. At lave emacs til at fremhæve postgresql-syntaks som standard