Sunday, January 19, 2014

Fungsi Trigger SQL

Tags

tugas3=# \d stokbarabf;
Did not find any relation named "stokbarabf".
tugas3=# \d stokbarang;

  • Berikut membuat Tabel Sok Barang

Table "public.stokbarang"
Column | Type | Modifiers
------------------------+------------------+-----------
kode_barang | character(5) | not null
nama_barang | character(30) |
stok_ketersediaan | integer |
Indexes:
"stokbarang_pkey" PRIMARY KEY, btree (kode_barang)
Referenced by:
TABLE "pembelian" CONSTRAINT "pembelian_kode_barang_fkey" FOREIGN KEY (kode_barang) REFERENCES stokbarang(kode_barang)

  • Membuat Tabel Pembelian

tugas3=# \d pembelian;

Table "public.pembelian"
Column | Type | Modifiers
-------------------+-----------------+-----------
kode_barang | character(20) |
jumlah_beli | integer |

Foreign-key constraints:
"pembelian_kode_barang_fkey" FOREIGN KEY (kode_barang) REFERENCES stokbarang(kode_barang)

  • pada 2 tabel diatas sudah di relasikan, kemudian kita buat functionnya.


tugas3=# CREATE OR REPLACE FUNCTION update_stok() RETURNS TRIGGER as '
tugas3'# DECLARE
tugas3'# current_stok int4;
tugas3'# BEGIN
tugas3'# update stokbarang set stok_ketersediaan=stok_ketersediaan-new.jumlah_beli where kode_barang=new.kode_barang;
tugas3'# return new;
tugas3'# end;
tugas3'# ' LANGUAGE 'plpgsql';
CREATE FUNCTION

  • update stokbarang set stok_ketersediaan=stok_ketersediaan-new.jumlah_beli where kode_barang=new.kode_barang;
    return new;
  • mengupdate tabel stokbarang pada kolom stok_ketersediaan=(stok_ketersediaan dikurangi jumlah_beli ) nilai jumlah beli diambil saat mengimputkan jumlah _beli pada table pembelian, karena trigger ini dipanggil setelah mengisi data pada tabel pembelian.

  • Kemudian kita masukkan data stokbarang.

tugas3=# insert into stokbarang values('10023','sikat gigi',50);
INSERT 0 1
tugas3=# insert into stokbarang values('10024','sabun mandi',50)
tugas3-# insert into stokbarang values('10024','sabun mandi',50);

tugas3=# insert into stokbarang values('10024','sabun mandi',50);
INSERT 0 1

  • Membuat trigger dengan nama “update_stok”

tugas3=# CREATE TRIGGER update_stok
tugas3-# AFTER INSERT ON pembelian
tugas3-# FOR EACH ROW
tugas3-# EXECUTE PROCEDURE update_stok();
CREATE TRIGGER

  • maksud dari query diatas, membuat trigger namanya update_stok dan akan dijalankan setelah proses pemasukan/insert di tabel pembelian, isi dari trigger ini adalah memanggil function update_stok(); yang sudah kita buat tadi.


tugas3=#
tugas3=# select * from stockbarang;
tugas3=# select * from stokbarang;
kode_barang | nama_barang | stok_ketersediaan
-------------+---------------------------+-------------------
10023 | sikat gigi | 50
10024 | sabun mandi | 50
(2 rows)

  • Terlihat stok barang yang telah kita masukkan tadi, dengan kode_barang, nama_barang, dan stok_barang. kedua barang mempunyai stok yang masih utuh ( 50 ).

  • Selanjutnya masukkan data ke tabel pembelian, kita misalkan ada pembelian membeli barang yang ( kode_barangnya 10023 dan jumlah barang yang dibeli 5 ) , setelah proses insert berhasil maka trigger akan otomatis berjalan ( memanggil function yang telah dibuat tadi ) , cara kerja function ( mengurangi stok ) dapat dilihat pada penjelasan diatas.

  • Setelah itu kita lihat apakah trigger kita berhasil memanggil function untuk mengpdate stokbarang dengan cara ketik “SELECT * from stokbarang” .

tugas3=# insert into pembelian (kode_barang,jumlah_beli) values('10023','5');
INSERT 0 1
tugas3=# select * from stokbarang;
kode_barang | nama_barang | stok_ketersediaan
-------------+-----------------------------+-------------------
10024 | sabun mandi | 50
10023 | sikat gigi | 45
(2 rows)


  • Kita lihat stok_ketersediaan pada kode_barang =10023 berubah menjadi 45 ( hasil dari 50 -5 )