sql >> Database teknologi >  >> RDS >> PostgreSQL

Postgres indsætte eller opdatere trigger WHEN tilstand (gammel)

Mulighed A:

Du kan ændre koden, så forholdene vil være i triggerfunktionen i stedet for selve triggeren. Med denne tilgang OLD vil kun blive brugt i UPDATE .

Udløser:

CREATE TRIGGER mytrigger
    BEFORE INSERT OR UPDATE ON "mytable"
    FOR EACH ROW 
    EXECUTE PROCEDURE mytrigger();

Udløserfunktion:

CREATE OR REPLACE FUNCTION mytrigger()
  RETURNS trigger AS
$BODY$
begin
if NEW.score > 0 then
     --code for Insert
     if  (TG_OP = 'INSERT') then
           YOUR CODE
     end if;

     --code for update
     if  (TG_OP = 'UPDATE') then
           if OLD.score <> NEW.score then  -- (if score can be null see @voytech comment to this post)
              YOUR CODE
           end if;
     end if;
end if;
return new;
end;
$BODY$
  LANGUAGE plpgsql VOLATILE

Mulighed B:

Som Thilo foreslog, skriv to triggere, der deler den samme triggerfunktion.

Udløsere:

CREATE TRIGGER mytrigger1
    BEFORE INSERT ON "mytable"
    FOR EACH ROW 
    WHEN NEW.score > 0
    EXECUTE PROCEDURE mytrigger();


CREATE TRIGGER mytrigger2
    BEFORE UPDATE ON "mytable"
    FOR EACH ROW 
    WHEN (NEW.score > 0 AND OLD.score <> NEW.score)
    EXECUTE PROCEDURE mytrigger();

Udløserfunktion:

CREATE OR REPLACE FUNCTION mytrigger()
  RETURNS trigger AS
$BODY$
begin
      YOUR CODE
return new;
end;
$BODY$
  LANGUAGE plpgsql VOLATILE


  1. SQL-kommando ikke afsluttet korrekt Undtagelse

  2. MySQL LIKE %string% ikke helt tilgivende nok. Noget andet jeg kan bruge?

  3. php oprette forbindelse til mysql db i cloud 9?

  4. Hvad er forskellen mellem CHAR og VARCHAR i SQL Server - SQL Server / T-SQL Tutorial Del 31