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...
ERROR: control reached end of trigger procedure without RETURN
ReplyDeleteCONTEXT: PL/pgSQL function tr_transaksi()
terima kasih tutorialnya gan..
ReplyDeletesukses buat
triger after insert delete duplicate value
terimakasih tutorialnya
ReplyDeletebermanfaat sekali :
mantap tutorialnya..lumayan utk yang baru belajar kaya saya..hehe
ReplyDelete