BAB VIII
DATABASE TRIGGER
Trigger adalah sebuah stored procedure yang dieksekusi pada saat terjadi modifikasi data pada table –
table dalam database. Data pada sebuah table dikatakan telah dimodifikasi jika pada table tersebut
dilakukan pemasukan data (INSERT), pengubahan data (UPDATE), atau penghapusan data (DELETE).
Trigger diaktivasi berdasarkan event yang terjadi sehingga trigger berguna sekali dalam menjaga
integritas dan konsistensi data.
Trigger merupakan sebuah unit program yang disimpan di database dan hanya dapat dieksekusi (fired)
secara implisit oleh oracle server menurut event yang terjadi pada objek acuan trigger tersebut. Trigger
dapat berisi SQL, PL/SQL, dan JAVA Statement. Selain itu juga dapat memanggil method yang ditulis
dengan C LANGUAGE.
Trigger mempunya banyak kegunaan,antara lain :
1. Menentukan nilai kolom – kolom tertentu secara otomatis
2. Menghindari transaksi yang tidak valid
3. Membuat autorisasi security yang kompleks
4. Membuat business role yang kompleks
Trigger hanya dapat dieksekusi secara implisit oleh ORACLE SERVER, eksekusi trigger sendiri dapat dipicu
oleh salah satu event berikut :
1. DML Event, yaitu INSERT, UPDATE, atau DELETE Statement
2. DDL Event, yaitu CREATE, ALTER, DROP Statement
3. Database Event, seperti database startup atau shutdown, munculnya error message tertentu, atau
User Event (saat user LOGON atau LOGOFF)
Dibawah ini ada 4 tipe trigger akan diaktifkan sekali tabel :
1. Before, pada tipe ini trigger akan diaktifkan sekali sebelum suatu perintah dilaksanakan
2. Before…for each row, pada tipe ini trigger akan diaktifkan sebelum setiap baris mendapat
perubahan
3. Alter…for each row, pada tipe ini trigger akan diaktifkan setelah setiap baris mendapatkan
perubahan
4. AFTER, pada tipe ini trigger akan diaktifkan sekali setelah perintah dilaksanakan
Secara umum kemungkinan event trigger yang terdapat dalam sebuah database adalah sebagai berikut :
1. BEFORE INSERT : diaktivasi sekali sebelum statement insert
2. BEFORE INSERT FOR EACH ROW : diaktivasi sekali sebelum setiap baris diinsert
3. AFTER INSERT : diaktivasi sekali setelah statement insert
4. BEFORE UPDATE : diaktivasi sekali sebelum statement update
5. BEFORE UPDATE EACH ROW : Diaktivasi sekali sebelum setiap baris diupdate
6. AFTER UPDATE : diaktivasi sekali setelah statement update
7. BEFORE DELETE : diaktivasi sekali sebelum statement delete
8. BEFORE DELETE EACH ROW : diaktivasi sekali sebelum setiap statement baris didelete
9. AFTER DELETE : diaktivasi sekali setelah statement delete
10. AFTER DELETE FOR EACH ROW : diaktivasi sekali setelah setiap baris terbuat
11. AFTER UPDATE FOR EACH ROW : diaktivasi sekali setelah setiap baris dirubah
12. AFTER INSERT FOR EACH ROW : diaktivasi sekali setelah setiap baris diinsert
Dalam sebuah database trigger tidak selalu dijalankan, hal ini tergantung pada pengesetan (setting)
trigger itu sendiri. Artinya trigger akan dieksekusi jika trigger tersebut diaktifkan (ENABLE) dan diabaikan
jika trigger tersebut di non aktifkan (DISABLE).
Oracle menyediakan statement ALTER TRIGGER yang berfungsi untuk mengaktifkan (bukan
menjalankan) dan menon aktifkan trigger yang terdapat dalam database. Klausa ENABLE digunakan
untuk mengaktifkan trigger dan, klausa DISABLE digunakan untuk menon aktifkan trigger. Adapun syntax
umum menggunakan statement ALTER TRIGGER adalah
ALTER TRIGGER
nama_trigger
ENABLE|DISABLE
Trigger dapat juga dihapus, dengan menggunakan statement sebagai berikut :
DROP TRIGGER [schema.]trigger;
User pemilik suatu schema dapat menghapus semua trigger yang ada pada schema tersebut. Untuk
menghapus trigger yang berada pada schema lainnya, user tersebut harus memiliki system priviledges
DROP ANY TRIGGER.
1. Jelaskan beberapa definisi trigger berikut ini :
a. Trigger name
Merupakan namespace yang diberikan oleh oracle untuk package yang bersifat unik dan
harus bukan nama procedure
b. Trigger time point
c.
d. Triggering event(s)
Kejadian atau proses (event) yang dijadikan sebagai pemicu untuk menjalankan trigger
dimana trigger dijalankan ada 2 event :
- Before
- After
e. Triggering type
Tipe trigger yang diaktifkan berdasarkan event pada tabel :
- Before
- Before .. for each row
- After
- After … for each row
f. Trigger Restriction
Merupakan batasan trigger dapat dipakai dalam suatu schema, yaitu :
- Trigger hanya dapat digunakan untuk menuliskan statement DML
- Tidak dapat mengandung perintah DDL,DCL,
- Tidak memanggil code lain yang menjalankan perintah control transaksi
- Tidak bisa declare atau mengacau pada LONG atau LONG RAW data
g. Trigger Body
Merupakan bentuk umum trigger yang berupa PL/SQL yang digunakan sebagai procedure
yang ditulis dengan C Language atau JAVA
2. Selain dapat diterapkan dalam manipulasi data (DML), trigger juga dapat diimplementasikan pada
system oracle. Berikan penjelasan serta contohnya!
Trigger yang dijalankan setelah operasi system seperti startup, shutdown, logon, logoff dan
pembuatan object
Contoh :
CREATE TABLE koneksi (
Tanggal_login DATE,
Username VARCHAR2(30));
CREATE OR REPLACE PROCEDURE proses_login IS
BEGIN
INSERT INTO koneksi (tanggal_login,username)
VALUES (SYSDATE,USER);
END proses_login;
CREATE OR REPLACE TRIGGER login
AFTER LOGON ON DATABASE
CALL proses_login
3. Sebutkan dan jelaskan macam – macam event Trigger!
a. BEFORE INSERT : diaktivasi sekali sebelum statement insert
b. BEFORE INSERT FOR EACH ROW : diaktivasi sekali sebelum setiap baris diinsert
c. AFTER INSERT : diaktivasi sekali setelah statement insert
d. BEFORE UPDATE : diaktivasi sekali sebelum statement update
e. BEFORE UPDATE EACH ROW : Diaktivasi sekali sebelum setiap baris diupdate
f. AFTER UPDATE : diaktivasi sekali setelah statement update
g. BEFORE DELETE : diaktivasi sekali sebelum statement delete
h. BEFORE DELETE EACH ROW : diaktivasi sekali sebelum setiap statement baris didelete
i. AFTER DELETE : diaktivasi sekali setelah statement delete
j. AFTER DELETE FOR EACH ROW : diaktivasi sekali setelah setiap baris terbuat
k. AFTER UPDATE FOR EACH ROW : diaktivasi sekali setelah setiap baris dirubah
l. AFTER INSERT FOR EACH ROW : diaktivasi sekali setelah setiap baris diinsert
4. Berikan sebuah contoh trigger untuk event BEFORE DELETE FOR EACH ROW
CREATE OR REPLACE TRIGGER tr_ed_no_pelanggan
BEFORE DELETE ON PELANGGAN
FOR EACH ROW
BEGIN
DELETE FROM orders
WHERE no_pelanggan =: OLD.no_pelanggan;
END: