-
Ketentuan :
- Barang yang akan dibeli atau dijual harus ada di tabel MASTER_BARANG
- Pembelian akan menambah stock barang
- Penjualan akan mengurangi stock barang
- Quantity (QTY) penjualan dan pembelian boleh diupdate dan otomatis akan mempengaruhi jumlah stock di MASTER_BARANG
2. Membuat Trigger DatabaseSQL> CREATE TABLE MASTER_BARANG 2 (KODE_BRG NUMBER(4) PRIMARY KEY, 3 NAMA_BRG VARCHAR2(20) NOT NULL, 4 HARGA NUMBER(10), 5 STOCK NUMBER(4)); Table created. SQL> CREATE TABLE ORD 2 (NO_ORDER NUMBER(4) PRIMARY KEY, 3 ID_SUPPLIER NUMBER(4) NOT NULL, 4 TGL_ORDER DATE, 5 RP_TOTAL NUMBER(12)); Table created. SQL> CREATE TABLE ORDER_DETAIL 2 (NO_ORDER NUMBER(4) REFERENCES ORD(NO_ORDER), 3 NO_URUT NUMBER(3), 4 KODE_BRG NUMBER(4) REFERENCES MASTER_BARANG(KODE_BRG), 5 HARGA NUMBER(10), 6 QTY NUMBER(4), 7 SUBTOTAL NUMBER(10)); Table created. SQL> CREATE TABLE SALES 2 (NO_SALES NUMBER(4) PRIMARY KEY, 3 ID_CUST NUMBER(4) NOT NULL, 4 TGL_SALES DATE, 5 RP_TOTAL NUMBER(12)); Table created. SQL> CREATE TABLE SALES_DETAIL 2 (NO_SALES NUMBER(4) REFERENCES SALES(NO_SALES), 3 NO_URUT NUMBER(3), 4 KODE_BRG NUMBER(4) REFERENCES MASTER_BARANG(KODE_BRG), 5 HARGA NUMBER(10), 6 QTY NUMBER(4), 7 SUBTOTAL NUMBER(10)); Table created.
Trigger UPDATE_STOCK_BRG_ORD
Buat trigger update_stock_brg_ord di tabel order_detail Yang berfungsi untuk mengupdate stock di tabel master_barang jika ada pembelian barang atau perubahan qty di tabel order_detail.
SQL> CREATE OR REPLACE TRIGGER update_STOCK_brg_ord
2 BEFORE INSERT OR UPDATE OF QTY ON order_detail
3 FOR EACH ROW
4 BEGIN
5 IF NVL(:OLD.QTY,0) < NVL(:NEW.QTY,0) THEN
6 UPDATE MASTER_BARANG
7 SET STOCK = STOCK + (NVL(:NEW.QTY,0)-NVL(:OLD.QTY,0))
8 WHERE KODE_BRG = :NEW.KODE_BRG;
9 ELSE
10 UPDATE MASTER_BARANG
11 SET STOCK = STOCK - (NVL(:OLD.QTY,0)-NVL(:NEW.QTY,0))
12 WHERE KODE_BRG = :NEW.KODE_BRG;
13 END IF;
14 END;
15 /
Trigger created.
Trigger UPDATE_STOCK_BRG_SALESBuat trigger update_stock_brg_sales di tabel sales_detail yang berfungsi untuk mengupdate stock di tabel master_barang jika ada penjualan barang atau perubahan qty di tabel sales_detail.
SQL> CREATE OR REPLACE TRIGGER update_STOCK_brg_sales
2 BEFORE INSERT OR UPDATE OF QTY ON sales_detail
3 FOR EACH ROW
4 BEGIN
5 IF NVL(:OLD.QTY,0) < NVL(:NEW.QTY,0) THEN
6 UPDATE MASTER_BARANG
7 SET STOCK = STOCK - (NVL(:NEW.QTY,0)-NVL(:OLD.QTY,0))
8 WHERE KODE_BRG = :NEW.KODE_BRG;
9 ELSE
10 UPDATE MASTER_BARANG
11 SET STOCK = STOCK + (NVL(:OLD.QTY,0)-NVL(:NEW.QTY,0))
12 WHERE KODE_BRG = :NEW.KODE_BRG;
13 END IF;
4 END;
15 /
Trigger created.
3. Isi Data ke tabelIsi master_barang dengan beberapa barang dengan kolom stock di set 0 sebagai data awal.
SQL> INSERT INTO MASTER_BARANG VALUES(100,’PERMEN’,1000,0);
SQL> INSERT INTO MASTER_BARANG VALUES(200,’BUKU’,2500,0);
SQL> INSERT INTO MASTER_BARANG VALUES(300,’ROTI’,1500,0);
Lihat isi tabel MASTER_BARANGSQL> select * from MASTER_BARANG;
KODE_BRG NAMA_BRG HARGA STOCK ---------- ---------- ------ ------- 100 PERMEN 1000 0 200 BUKU 2500 0 300 ROTI 1500 04. Pembelian, Penjualan dan Update
Lakukan pembelian untuk semua barang permen 200, buku 100, roti 100
Proses pembelian disini berarti Anda mengisi data ke tabel ORD dan ORDER_DETAIL
Isi dulu tabel ORD
SQL> INSERT INTO ORD VALUES(1,100,SYSDATE,600000);
1 row created.
Isi tabel ORD_DETAILSQL> INSERT INTO ORDER_DETAIL VALUES(1,2,200,2500,100,250000); SQL> INSERT INTO ORDER_DETAIL VALUES(1,3,300,1500,100,150000); SQL> INSERT INTO ORDER_DETAIL VALUES(1,1,100,1000,200,200000);Lihat data di ORD_DETAIL
SQL> SELECT * FROM ORDER_DETAIL;
NO_ORDER NO_URUT KODE_BRG HARGA QTY SUBTOTAL -------- ------- ---------- ------ --- ---------- 1 2 200 2500 100 250000 1 3 300 1500 100 150000 1 1 100 1000 200 200000
Periksa stock pada tabel master_barang
SQL> select * from MASTER_BARANG;
KODE_BRG NAMA_BRG HARGA STOCK ---------- ---------- ------ ------- 100 PERMEN 1000 200 200 BUKU 2500 100 300 ROTI 1500 100
Semua stock barang sudah bertambah sesuai jumlah order.
Lakukan penjualan barang permen 20, buku 10, roti 50
Proses penjualan disini berarti Anda mengisi data ke tabel SALES dan SALES_DETAIL
Isi tabel SALES
SQL> INSERT INTO SALES VALUES (1,222,SYSDATE,120000); 1 row created.
Isi tabel SALES_DETAIL
SQL> INSERT INTO SALES_DETAIL VALUES(1,1,100,1000,20,20000);
SQL> INSERT INTO SALES_DETAIL VALUES(1,2,200,2500,10,25000);
SQL> INSERT INTO SALES_DETAIL VALUES(1,3,300,1500,50,75000);
Lihat isi tabel SALES_DETAIL
SQL> select * from SALES_DETAIL;
NO_SALES NO_URUT KODE_BRG HARGA QTY SUBTOTAL -------- ------- -------- ------ ----- -------- 1 1 100 1000 20 20000 1 2 200 2500 10 25000 1 3 300 1500 50 75000
Lihat stock di tabel MASTER_BARANG
SQL> select * from MASTER_BARANG;
KODE_BRG NAMA_BRG HARGA STOCK ---------- ---------- ------ ------ 100 PERMEN 1000 180 200 BUKU 2500 90 300 ROTI 1500 50
Stock berkurang sesuai dengan jumlah penjualan.
Demikian pembahasan sederhana tentang manajemen stock (inventory) dengan menggunakan trigger database.
Silahkan dikembangkan sesuai dengan keperluan Anda.