Trigger Pada Oracle

25 Sep

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;

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: