Pages

Saturday, January 15, 2011

TRIGGER dalam ORACLE

Aturan Penulisan Trigger

CREATE OR REPLACE TRIGGER nama_trigger
timing
event1 OR event2 OR event3
ON nama_objek
FOR EACH ROW
begin
end;
/

Note:
timing : BEFORE, AFTER, INSTEAD OF
event INSERT, UPDATE, DELETE, LOGON, LOGOFF
objek : nama table, nama user, database


Contoh Trigger
Pertama saya akan membuat sebuah tabel dengan nama rekaman, tabel ini berfungsi untuk mencatat semua aktivitas yang kita lakukan sesuai dengan trigger yang kita buat selama kita memanipulasi data dalam oracle.

Langkah pertama yaitu membuat tabel
CREATE TABLE rekaman
(pelaku varchar(10),
tanggal date,
jam date,
aksi varchar(100)
)
/


langkah Kedua yaitu kita mulai dengan membuat sebuah trigger untuk user yang login
CREATE OR REPLACE TRIGGER masuk
AFTER
LOGON
ON DATABASE
begin
insert into rekaman values (
user, sysdate, sysdate,
'login ke database'
);
end;
/

setelah kita menjalankan Trigger diatas, untuk mengecek apakah triggernya sudah jalan atau tidak, hal pertama yang kita lakukan yaitu :
- disconn;
- conn nama_user/pass_user;

Trigger ini kita gunakan untuk mencatat siapa saja user yang login ke system dan hasilnya akan dicatat didalam tabel rekaman.
Kita bisa melihatnya dengan menggunakan perintah dibawah ini.
select pelaku, tanggal, to_char(jam, 'HH:MI:SS'), aksi from rekaman;

langkah Ketiga yaitu kita mulai dengan membuat sebuah trigger untuk user yang logoff
CREATE OR REPLACE TRIGGER keluar
BEFORE
LOGOFF
ON DATABASE
begin
insert into rekaman values (
user, sysdate, sysdate,
'logout ke database');
end;
/

Trigger ini kita gunakan untuk mencatat siapa saja user yang sudah logoff dari dalam system dan hasilnya akan dicatat didalam tabel rekaman.
Kita bisa melihatnya dengan menggunakan perintah dibawah ini.
select pelaku, tanggal, to_char(jam, 'HH:MI:SS'), aksi from rekaman;

Langkah Yang Keempat yaitu kita akan membuat sebuah trigger yang kita gunakan untuk mengupdate data yang ada dalam tabel REGIONS

CREATE OR REPLACE TRIGGER updateanu
AFTER
UPDATE

ON regions
FOR EACH ROW
begin
insert into rekaman values (
user,sysdate,sysdate,
'mengubah data ke regions dengan nama '||:old.region_name||' menjadi '||:new.region_name);
end;
/

perintah untuk mengecek triggernya
select pelaku, tanggal, to_char(jam, 'HH:MI:SS') Jam, aksi from rekaman;

Langkah Yang Keenamt yaitu kita akan membuat sebuah trigger yang kita gunakan untuk menghapus data yang ada dalam tabel REGIONS
CREATE OR REPLACE TRIGGER deleteanu
AFTER
DELETE

ON regions
FOR EACH ROW
begin
insert into rekaman values (
user,sysdate,sysdate,
'mendelete table regions dengan id '||:new.region_id);
end;
/


Contoh Trigger yang digunakan untuk keamanan data, sehingga jika ada yang berusaha menghapus isi tabel rekaman, maka akan proses penghapusan akan digagalkan dana dalam tabel rekaman dicatat "berusaha menghapus rekaman data"
Pertama, sebelum kita membuat triggernya, kita terlebih dahulu membuat sebuah VIEW

CREATE VIEW v_rekaman
as
select pelaku, tanggal, to_char(jam, 'HH:MI:SS') jam, aksi from rekaman;

kemudian kita membuat triggernya
CREATE OR REPLACE TRIGGER awas
INSTEAD OF
DELETE

ON v_rekaman
FOR EACH ROW
begin
dbms_output.put_line('berusaha menghapus rekaman data');
end;
/


CATATAN PENTING

delete from rekaman; --------> menghapus data di tabel rekaman
alter trigger masuk; --------> menonaktifkan semua trigger

prosedure yang kita gunakan untuk memasukkan data kedalam tabel rekaman dengan parameternya adalah keterangan.
create or replace procedure rekamanp
(keterangan IN varchar)
IS
BEGIN
insert into rekaman (pelaku, tanggal, jam, aksi) values (
user,sysdate,sysdate, keterangan);
END;
/


TRIGGER yang digunakan untuk mencatat hasil insert, update, dan delete dalam tabel REGIONS, dimana kita memanggil procedure rekamanp yang diatas sebagai acuan.

CREATE OR REPLACE TRIGGER gabung
AFTER
INSERT OR UPDATE OR DELETE

ON regions
FOR EACH ROW
begin
if inserting then
rekamanp('BERHASIL MENGINSERT DATA KEDALAM TABEL REGIONS');
elsif updating then
rekamanp('BERHASIL MENGUPDATE DATA KEDALAM TABEL REGIONS');
elsif deleting then
rekamanp('BERHASIL MENDELETE DATA KEDALAM TABEL REGIONS');
end if;
end;
/