Trigger adalah objek database yang dijalankan secara otomatis ketika terjadi perubahan data pada tabel tertentu. Trigger dapat digunakan untuk mengubah data sebelum proses INSERT, menyimpan data ke tabel lain sebelum diupdate atau dihapus, serta membatasi operasi DML berdasarkan kondisi tertentu.
1 of 13
Downloaded 180 times
More Related Content
Pemrograman Basis Data "Trigger"
1. Trigger
Pemograman Basis Data
Kelompok :
Muh.Taufik H. (12410100126)
Moh.Toif Nizar Fatoni (12410100148)
Ekky Anugrah Putra (12410100156)
Reza Herbianto (12410100106)
2. *
Trigger adalah sebuah objek database yang diasosiasikan dengan
sebuah tabel dan akan aktif (terpicu/trigger) ketika sebuah event
terjadi pada tabel tersebut.
Event adalah sebuah proses yang akan dilakukan oleh sistem
ketika menemui suatu kejadian yang dipicu oleh perilaku dari luar
sistem.
Dalam sistem database perilaku di luar sistem yang memicu
adanya event adalah pada saat user melakukan modifikasi data,
maka secara otomatis trigger akan dijalankan.
Trigger hanya akan terjadi ketika ada eksekusi
INSERT,UPDATE,DELETE pada tabel yang bersangkutan.
PemogramanBasisData
3. *
Trigger dibuat sesuai dengan keperluan. Ada kalanya trigger perlu
dibuat, dan kadangkala tidak perlu dibuat.
Trigger perlu dibuat pada saat :
Membentuk sebuah aksi tertentu terhadap suatu event
Memusatkan operasi global
Trigger tidak perlu dibuat, jika :
Fungsionalitas yang diperlukan ada pada Oracle server.
Duplikat atau sama dengan fungsi trigger yang lain.
PemogramanBasisData
4. *
Trigger dapat digunakan untuk mengubah data sebelum
proses INSERT dilakukan atau untuk memberikan nilai
default.Misalnya mengubah data yang diluar nilai yang
diperbolehkan.Misalnya,jika ada pengisian nilai di atas
100 maka akan dijadikan 100.
Anda dapat menyimpan data suatu record ke tabel lain
(misalnya history) sebelum data tersebut diupdate atau
didelete.Sehingga semua perubahan data dapat dilacak
semenjak data itu dibuat.
PemogramanBasisData
5. *
1. Trigger timing :
*a. Untuk tabel : BEFORE, AFTER
*b. Untuk view : INSTEAD OF
2. Trigger event : INSERT, UPDATE atau DELETE
3. Nama tabel : yaitu nama tabel atau view yang
berhubungan dengan trigger.
4. Tipe trigger : Baris atau Pernyataan (statement)
5. Klausa WHEN : untuk kondisi pembatasan
6. Trigger body : bagian prosedur yang dituliskan pada
trigger.
PemogramanBasisData
6. *
Create Trigger nama_trigger
{ Before | After }
{ INSERT | UPDATE | DELETE }
ON nama_tabel
FOR EACH ROW
statement-statement
PemogramanBasisData
7. CREATE OR REPLACE TRIGGER secure_emp
BEFORE INSERT ON employees
BEGIN
IF (TO_CHAR(SYSDATE,'DY') IN ('SAT','SUN')) OR
(TO_CHAR(SYSDATE,'HH24:MI') NOT BETWEEN '08:00' AND '18:00')
THEN RAISE_APPLICATION_ERROR (-20500,'Penyisipan data pada
table
EMPLOYEES hanya diperbolehkan selama jam kerja');
END IF;
END;
Contoh trigger diatas akan membatasi penyisipan baris baru ke dalam table
EMPOYEES diperbolehkan hanya pada jam kerja mulai hari Senin sampai
Jumat. Jika er menyisipkan baris baru diluar ketentuan tersebut, missal pada
hari sabtu maka akan tampil pesan kesalahan.
PemogramanBasisData
8. BEFORE INSERT OR UPDATE OR DELETE ON employees
BEGIN
IF (TO_CHAR (SYSDATE,'DY') IN ('SAT','SUN')) OR (TO_CHAR (SYSDATE, 'HH24') NOT BETWEEN
'08' AND '18')
THEN
IF DELETING THEN
RAISE_APPLICATION_ERROR (-20502,'You may delete from EMPLOYEES table only during
business hours.');
ELSIF INSERTING THEN
RAISE_APPLICATION_ERROR (-20500,'You may insert into EMPLOYEES table only during
business hours.');
ELSIF UPDATING ('SALARY') THEN
RAISE_APPLICATION_ERROR (-20503,'You may update SALARY only during business hours.');
ELSE
RAISE_APPLICATION_ERROR (-20504,'You may update EMPLOYEES table only during normal
hours.');
END IF;
END IF;
END;
Event pada trigger bisa dikombinasikan dalam dengan menggunakan predikat
kondisional INSERTING, UPDATING dan DELETING. Berikut ini akan dibuat trigger
yang menggunakan predikat kondisional INSERTING, UPDATING dan DELETING
untuk membatasi manipulasi data pada tabel EMPLOYEES hanya diperbolehkan pada
setiap jam kerja mulai hari Senin sampai Jumat.
PemogramanBasisData
9. Berikut ini akan dibuat row trigger dengan timing BEFORE untuk
membatasi operasi DML pada table EMPLOYEES hanya
diperbolehkan untuk pegawai yang memiliki kode pekerjaan
AD_PRES dan AD_VP serta memiliki gaji kurang dari 15000.
CREATE OR REPLACE TRIGGER restrict_salary
BEFORE INSERT OR UPDATE OF salary ON employees
FOR EACH ROW
BEGIN
IF NOT (:NEW.job_id IN ('AD_PRES', 'AD_VP'))
AND :NEW.salary > 15000
THEN
RAISE_APPLICATION_ERROR (-20202,'Employee
cannot earn this amount');
END IF;
END;
PemogramanBasisData
10. CREATE OR REPLACE TRIGGER audit_emp_values
AFTER DELETE OR INSERT OR UPDATE ON employees
FOR EACH ROW
BEGIN
INSERT INTO audit_emp_table (user_name, timestamp,
id, old_last_name, new_last_name, old_title,
new_title, old_salary, new_salary)
VALUES (USER, SYSDATE, :OLD.employee_id,
:OLD.last_name, :NEW.last_name, :OLD.job_id,
:NEW.job_id, :OLD.salary, :NEW.salary );
END;
Pada Row Trigger, nilai dari kolom sebelum dan sesudah perubahan data
dapat dirujuk dengan menggunakan OLD dan NEW qualifier. OLD dan
NEW hanya digunakan pada Row Trigger. OLD dan NEW menggunakan
prefiks (:) untuk pernyataan dalam perintah SQL. Jika qualifier ini terlibat
dalam pembatasan kondisi pada klausa WHEN, maka tidak digunakan
prefiks (:).
PemogramanBasisData
11. CREATE OR REPLACE TRIGGER derive_commission_pct
BEFORE INSERT OR UPDATE OF salary ON employees
FOR EACH ROW
WHEN (NEW.job_id = 'SA_REP')
BEGIN
IF INSERTING
THEN :NEW.commission_pct := 0;
ELSIF :OLD.commission_pct IS NULL
THEN :NEW.commission_pct := 0;
ELSE
:NEW.commission_pct := :OLD.commission_pct + 0.05;
END IF;
END;
Untuk membatasi operasi trigger hanya pada baris yang memenuhi kondisi
tertentu, maka digunakan klausa WHEN. Berikut ini akan dibuat trigger pada
tabel EMPLOYEES yang menghitung komisi yang diterima oleh seorang
pegawai pada saat sebuah baris ditambahkan ke dalam tabel EMPLOYEES,
atau pada saat dilakukan modifikasi pada gaji pegawai.
PemogramanBasisData
12. Untuk mengaktifkan atau menonaktifkan database trigger, digunakan
perintah :
ALTER TRIGGER trigger_name DISABLE | ENABLE
Untuk mengaktifkan atau menonaktifkan semua trigger yang berlaku
untuk sebuah tabel, digunakan perintah :
ALTER TABLE table_name DISABLE | ENABLE ALL
Untuk melakukan kompilasi ulang sebuah trigger, digunakan perintah
:
ALTER TRIGGER trigger_name COMPILE
Untuk menghapus trigger dari database, digunakan perintah :
DROP TRIGGER trigger_name
PemogramanBasisData