Membuat Trigger di PostgreSQL

Kali ini saya akan menjelaskan cara membuat trigger di PostgreSQL. Pada kasus ini kita memiliki dua tabel yaitu tabel penjualan, dan tabel penjualan_item. Pertama kita buat dulu tabel-tabelnya:
CREATE TABLE penjualan(id_penjualan serial PRIMARY KEY, no_penjualan char(5), tgl_penjualan date, kd_customer char(5), total_penjualan int);
CREATE TABLE item(id_item serial PRIMARY KEY, id_penjualan char(5) references penjualann, kd_item char(5), quantity int, harga int);
Pada kasus ini kita akan membuat suatu trigger untuk  meng"update" nilai dari field total_penjualan pada table penjualan jika ada perubahan data pada tabel item, maka field total_penjualan akan ter"update" otomatis, dimana nilai total penjualan adalah perkalian dari  harga dengan quantity.

CREATE OR REPLACE FUNCTION tr_penjualan_item()
RETURNS trigger AS 
$$ 
BEGIN  
IF TG_OP = 'INSERT' THEN 
update penjualan set total_penjualan = total_penjualan + (NEW.quantity * NEW.harga) where id_penjualan = NEW.id_penjualan;
RETURN NEW;  
END IF;  
IF TG_OP = 'UPDATE' THEN 
update penjualan set total_penjualan = total_penjualan - (OLD.quantity * OLD.harga) where id_penjualan = OLD.id_penjualan;  
update penjualan set total_penjualan = total_penjualan + (NEW.quantity * NEW.harga) where id_penjualan = OLD.id_penjualan;
RETURN NEW;  
END IF;  
IF TG_OP = 'DELETE' THEN 
update penjualan set total_penjualan = total_penjualan - (OLD.quantity * OLD.harga) where id_penjualan = OLD.id_penjualan;  
RETURN OLD;  
END IF; 
END; 
$$ 
language plpgsql ;
CREATE TRIGGER tr_sales_item AFTER INSERT OR UPDATE OR DELETE ON item FOR EACH ROW EXECUTE PROCEDURE tr_penjualan_item();
Berikut hasil dari trigger diatas:
Pertama kita insert data ke tabel-tabel tersebut:
INSERT INTO penjualan (no_penjualan, tgl_penjualan, kd_customer, total_penjualan) values ('P0001','2014-01-01',0)
INSERT INTO penjualan_item (id_penjualan, kd_item, quantity, harga) values (1,'I001',2,10000)

Setelah terjadi perubahan pada tabel penjualan_item, maka trigger tr_sales_item akan secara otomatis berjalan dan mengeksekusi function tr_penjualan_item(), karena nilai awal dari total penjualan adala 0, maka nilai total_penjualan setelah terjadi perubahan pada table penjualan_item adalah 0 + (10000*2) = 20000.


Baiklah sekian tentang Trigger di PostgreSQL, Terima Kasih...

4 comments:

  1. ERROR: control reached end of trigger procedure without RETURN
    CONTEXT: PL/pgSQL function tr_transaksi()

    ReplyDelete
  2. terima kasih tutorialnya gan..
    sukses buat
    triger after insert delete duplicate value

    ReplyDelete
  3. terimakasih tutorialnya
    bermanfaat sekali :

    ReplyDelete
  4. mantap tutorialnya..lumayan utk yang baru belajar kaya saya..hehe

    ReplyDelete