PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Postgres insert atau update trigger WHEN condition (lama)

Opsi A:

Anda dapat mengubah kode sehingga kondisi akan berada di fungsi pemicu daripada pemicu itu sendiri. Dengan pendekatan ini OLD hanya akan digunakan dalam UPDATE .

Pemicu:

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

Fungsi pemicu:

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

Opsi B:

Seperti yang disarankan Thilo, tulis dua pemicu yang memiliki fungsi pemicu yang sama.

Pemicu:

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();

Fungsi pemicu:

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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Kueri mengembalikan jumlah baris yang tepat

  2. Mengekspor kueri PostgreSQL ke file csv menggunakan Python

  3. PostgreSQL:cara terbaik untuk menggabungkan subset kecil dari tabel besar

  4. Bagaimana mengatur UTF-8 di konstruktor kelas PDO untuk database PHP PgSQL

  5. Hilangkan tanda kutip ganda dari bidang json secara selektif di PostgreSQL