Replikasi Data dengan Oracle Updatable materialized views & Trigger

Setelah mengikuti catatan di :
Replikasi data dengan oracle updatable materialized views 1
Replikasi data dengan oracle updatable materialized views 2
Replikasi data dengan oracle updatable materialized views 3
Replikasi data dengan oracle updatable materialized views 4
bagaimana Replikasi Data dengan Oracle Updatable materialized views menggunakan Trigger, karena dng menggunakan trigger codding jadi lebih
simple dan praktis, tapi jika bandwidth master site – MV site, kecil maka update tabel sebagai akibat trigger akan lambat ter-update informasinya.
——————————————————————————–
– 1. PENAMBAHAN TRIGGER T_DBELI hanya di MASTER SITE
——————————————————————————-
IF DBMS_REPUTIL.FROM_REMOTE = FALSE THEN
— hanya mengijinkan di trigger dijalankan dari Master Site
ELSE
END IF;
——————————————————————————
– 2. PENAMBAHAN TRIGGER T_DBELI hanya di MASTER SITE
——————————————————————————
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 DBMS_REPUTIL.FROM_REMOTE = FALSE THEN
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 IF;
end update_stock;
/
———————————————————
— 3.TEST INSERT FROM MASTER SITE
———————————————————
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;
SELECT * FROM T_BELI WHERE NO_FAKTUR = ’002′;
SELECT * FROM T_DBELI WHERE NO_FAKTUR = ’002′;


Tags: materialized view, MV, oracle trigger, Oracle Updatable materialized View, replikasi, Replikasi Data, trigger, Updatable materialized View