Trigger Pada Oracle
langsung create tabel – tabel yang diperlukan, dalam demo kali ini saya menggunakan user scott
———————————–
– 1. Menyiapkan tabel – tabel
———————————–
conn scott/tiger@pmr01;
create table T_BARANG
(
KODE_BARANG CHAR(10) not null,
NAMA_BARANG CHAR(20) null ,
HARGA_BARANG NUMBER(15,2) null ,
constraint PK_T_BARANG primary key (KODE_BARANG)
);
create table T_JEN
(
KODE_TJEN CHAR(1) not null,
NAMA_TJEN CHAR(10) null ,
constraint PK_T_JEN primary key (KODE_TJEN)
);
create table T_SUP
(
KODE_SUPLIER CHAR(4) not null,
NAMA_SUPLIER CHAR(40) null ,
constraint PK_T_SUP primary key (KODE_SUPLIER)
);
create table T_BELI
(
NO_FAKTUR CHAR(6) not null,
KODE_SUPLIER CHAR(4) null ,
KODE_TJEN CHAR(1) null ,
TGL_FAKTUR DATE null ,
TOTAL_BRUTO NUMBER(15,2) null ,
TOTAL_DISKON NUMBER(15,2) null ,
TOTAL_JUMLAH NUMBER(15,2) null ,
constraint PK_T_BELI primary key (NO_FAKTUR)
);
create index FK_T_BELI_RELATION__T_SUP_FK on T_BELI (KODE_SUPLIER asc);
create index FK_T_BELI_RELATION__T_JEN_FK on T_BELI (KODE_TJEN asc);
create table T_DBELI
(
NO_FAKTUR CHAR(6) not null,
KODE_BARANG CHAR(10) not null,
HARGA NUMBER(15,2) null ,
QTY NUMBER(15,2) null ,
DISKON NUMBER(15,2) null ,
BRUTO NUMBER(15,2) null ,
JUMLAH NUMBER(15,2) null ,
constraint PK_T_DBELI primary key (NO_FAKTUR, KODE_BARANG)
);
create index FK_T_DBELI_RELATION__T_BARANG_ on T_DBELI
(KODE_BARANG asc);
create index FK_T_DBELI_RELATION__T_BELI_FK on T_DBELI (NO_FAKTUR asc);
alter table T_BELI
add constraint FK_T_BELI_FK_T_BELI_T_SUP foreign key (KODE_SUPLIER)
references T_SUP (KODE_SUPLIER);
alter table T_BELI
add constraint FK_T_BELI_FK_T_BELI_T_JEN foreign key (KODE_TJEN)
references T_JEN (KODE_TJEN);
alter table T_DBELI
add constraint FK_T_DBELI_FK_T_DBEL_T_BARANG foreign key (KODE_BARANG)
references T_BARANG (KODE_BARANG);
alter table T_DBELI
add constraint FK_T_DBELI_FK_T_DBEL_T_BELI foreign key (NO_FAKTUR)
references T_BELI (NO_FAKTUR);
———————————–
– 2. menambahkan isi tabel
———————————–
INSERT INTO t_barang ( KODE_BARANG, NAMA_BARANG, HARGA_BARANG)
VALUES (‘AAAAAAAAA1′,’HARDDISK 50 Giga Byte’, 500000);
INSERT INTO t_barang ( KODE_BARANG, NAMA_BARANG, HARGA_BARANG)
VALUES (‘AAAAAAAAA2′,’MONITOR 14 INCH’, 1000000);
INSERT INTO t_barang ( KODE_BARANG, NAMA_BARANG, HARGA_BARANG)
VALUES (‘AAAAAAAAA3′,’KEYBOARD’, 75000);
INSERT INTO t_barang ( KODE_BARANG, NAMA_BARANG, HARGA_BARANG)
VALUES (‘AAAAAAAAA4′,’MOUSE’, 50000);
INSERT INTO t_barang ( KODE_BARANG, NAMA_BARANG, HARGA_BARANG)
VALUES (‘BBBBBBBBB1′,’PRINTER’, 2000000);
INSERT INTO t_barang ( KODE_BARANG, NAMA_BARANG, HARGA_BARANG)
VALUES (‘CCCCCCCCC1′,’VGA CARD 3D’, 250000);
INSERT INTO t_barang ( KODE_BARANG, NAMA_BARANG, HARGA_BARANG)
VALUES (‘CCCCCCCCC2′,’LAN CARD 10/100 MB’, 125000);
INSERT INTO t_jen ( KODE_TJEN, NAMA_TJEN) VALUES (‘T’,'TERIMA’);
INSERT INTO t_jen ( KODE_TJEN, NAMA_TJEN) VALUES (‘R’,'RETUR’);
INSERT INTO t_sup ( KODE_SUPLIER, NAMA_SUPLIER)
VALUES (‘XXX1′,’MAJU TAK GENTAR, PT’);
INSERT INTO t_sup ( KODE_SUPLIER, NAMA_SUPLIER)
VALUES (‘XXX2′,’MORAT MARIT, PT’);
INSERT INTO t_sup ( KODE_SUPLIER, NAMA_SUPLIER)
VALUES (‘YYY3′,’COCA COLA’);
INSERT INTO t_sup ( KODE_SUPLIER, NAMA_SUPLIER)
VALUES (‘ZZZ4′,’ABC’);
INSERT INTO t_sup ( KODE_SUPLIER, NAMA_SUPLIER)
VALUES (‘XXX5′,’SINAR MAS’);
commit;
——————————————————–
– 3. menambah record tanpa triger
– harus melakukan penghitungan manual / update dari
– tabel tdbeli yang mempengaruhi tbeli
——————————————————–
INSERT INTO T_BELI ( NO_FAKTUR,KODE_SUPLIER,KODE_TJEN,TGL_FAKTUR,TOTAL_BRUTO,TOTAL_DISKON,TOTAL_JUMLAH)
VALUES (’001′,’XXX1′,’T',SYSDATE,0,0,0);
INSERT INTO T_DBELI ( NO_FAKTUR,KODE_BARANG,HARGA,QTY,DISKON,BRUTO,JUMLAH)
VALUES (’001′,’AAAAAAAAA8′,50000,1,0,50000,50000);
UPDATE T_BELI SET TOTAL_BRUTO = TOTAL_BRUTO + 50000, TOTAL_DISKON = TOTAL_DISKON + 0,
TOTAL_JUMLAH = TOTAL_JUMLAH + 50000 WHERE NO_FAKTUR = ’001′;
COMMIT;
———————————————–
– 4. PERIKSA DATA
———————————————–
SELECT * FROM T_BELI WHERE NO_FAKTUR = ’001′;
SELECT * FROM T_DBELI WHERE NO_FAKTUR = ’001′;

———————————————–
– 5. PENAMBAHAN TRIGER T_DBELI
———————————————–
CREATE OR REPLACE TRIGGER update_stock
after insert OR delete on t_dbeli
for each row
declare
mNO_FAKTUR t_dbeli.no_faktur%TYPE;
mBRUTO t_dbeli.bruto%TYPE;
mJUMLAH t_dbeli.jumlah%TYPE;
mTOTAL_BRUTO t_beli.total_bruto%TYPE;
mTOTAL_DISKON t_beli.total_diskon%TYPE;
mTOTAL_JUMLAH t_beli.total_jumlah%TYPE;
begin
IF INSERTING THEN
mNO_FAKTUR := :new.NO_FAKTUR;
mBRUTO := :new.BRUTO;
mJUMLAH := :new.JUMLAH;
select TOTAL_BRUTO, TOTAL_DISKON, TOTAL_JUMLAH
INTO mTOTAL_BRUTO, mTOTAL_DISKON, mTOTAL_JUMLAH FROM
t_beli WHERE NO_FAKTUR = mNO_FAKTUR;
UPDATE t_beli
SET TOTAL_BRUTO = TOTAL_BRUTO + mBRUTO,
TOTAL_DISKON = TOTAL_DISKON + (mBRUTO – mJUMLAH ),
TOTAL_JUMLAH = TOTAL_JUMLAH + mJUMLAH
WHERE NO_FAKTUR = mNO_FAKTUR;
END IF;
IF DELETING THEN
mNO_FAKTUR := :OLD.NO_FAKTUR;
mBRUTO := :OLD.BRUTO;
mJUMLAH := :OLD.JUMLAH;
select TOTAL_BRUTO, TOTAL_DISKON, TOTAL_JUMLAH
INTO mTOTAL_BRUTO, mTOTAL_DISKON, mTOTAL_JUMLAH FROM
t_beli WHERE NO_FAKTUR = mNO_FAKTUR;
UPDATE t_beli
SET TOTAL_BRUTO = TOTAL_BRUTO – mBRUTO,
TOTAL_DISKON = TOTAL_DISKON – (mBRUTO – mJUMLAH ),
TOTAL_JUMLAH = TOTAL_JUMLAH – mJUMLAH
WHERE NO_FAKTUR = mNO_FAKTUR;
END IF;
end update_stock;
/
——————————————————–
– 6. menambah record dengan triger
– hanya melakukan insert pada tabel tdbeli yang
– otomatis mempengaruhi tbeli lewat trigger
——————————————————–
INSERT INTO T_BELI ( NO_FAKTUR,KODE_SUPLIER,KODE_TJEN,TGL_FAKTUR,TOTAL_BRUTO,TOTAL_DISKON,TOTAL_JUMLAH)
VALUES (’002′,’XXX1′,’T',SYSDATE,0,0,0);
INSERT INTO T_DBELI ( NO_FAKTUR,KODE_BARANG,HARGA,QTY,DISKON,BRUTO,JUMLAH)
VALUES (’002′,’AAAAAAAAA8′,50000,1,0,50000,50000);
COMMIT;
Tags: oracle trigger, trigger
