Trigger
Menciptakan Triggers
Jenis Triggers
Triggers:
• Adalah blok PL / SQL atau prosedur PL / SQL yang berhubungan dengan tabel, view, skema, atau database
• Melaksanakan secara implisit setiap kali acara tertentu terjadi
• Bisa berupa:
- Application trigger: Dipanggil setiap kali suatu peristiwa terjadi dengan aplikasi tertentu
- Database trigger: Dipanggil setiap kali data event (seperti DML) atau system event (seperti logon atau shutdown) terjadi pada sebuah skema atau database
Pedoman untuk Merancang Triggers
• Desain Triggers untuk:
- Melakukan tindakan yang terkait
- Memusatkan operasi global
• Jangan desain Triggers:
- Dimana fungsi sudah dibangun ke server Oracle
- duplikat Triggers lainnya
• Membuat prosedur yang tersimpan dan memanggil mereka dalam Triggers, jika kode PL / SQL sangat panjang.
• Penggunaan yang berlebihan Triggers dapat mengakibatkan saling ketergantungan yang kompleks, yang mungkin sulit untuk mempertahankan dalam aplikasi besar.
Jenis Triggers
Triggers:
• Adalah blok PL / SQL atau prosedur PL / SQL yang berhubungan dengan tabel, view, skema, atau database
• Melaksanakan secara implisit setiap kali acara tertentu terjadi
• Bisa berupa:
- Application trigger: Dipanggil setiap kali suatu peristiwa terjadi dengan aplikasi tertentu
- Database trigger: Dipanggil setiap kali data event (seperti DML) atau system event (seperti logon atau shutdown) terjadi pada sebuah skema atau database
Pedoman untuk Merancang Triggers
• Desain Triggers untuk:
- Melakukan tindakan yang terkait
- Memusatkan operasi global
• Jangan desain Triggers:
- Dimana fungsi sudah dibangun ke server Oracle
- duplikat Triggers lainnya
• Membuat prosedur yang tersimpan dan memanggil mereka dalam Triggers, jika kode PL / SQL sangat panjang.
• Penggunaan yang berlebihan Triggers dapat mengakibatkan saling ketergantungan yang kompleks, yang mungkin sulit untuk mempertahankan dalam aplikasi besar.
Membuat DML Trigger
Sebuah pernyataan Triggers berisi:
• Triggers waktu
- Untuk tabel: BEFORE, AFTER
- Untuk view: INSTEAD OF
• Triggers event: INSERT, UPDATE, atau DELETE
• Nama Tabel: On table, view
• Jenis Triggers: Baris atau pernyataan
• klausa WHEN: Membatasi kondisi
• Triggers body: blok PL / SQL
• Triggers waktu
- Untuk tabel: BEFORE, AFTER
- Untuk view: INSTEAD OF
• Triggers event: INSERT, UPDATE, atau DELETE
• Nama Tabel: On table, view
• Jenis Triggers: Baris atau pernyataan
• klausa WHEN: Membatasi kondisi
• Triggers body: blok PL / SQL
Komponen DML Trigger
Triggers waktu: Kapan seharusnya Triggers dipanggil?
• BEFORE: Jalankan trigger body sebelum event Triggers DML pada tabel.
• AFTER: Jalankan trigger body setelah peristiwa Triggers DML pada tabel.
• INSTEAD OF: Jalankan trigger body instead of pernyataan Triggers. Ini digunakan untuk views yang tidak dinyatakan dimodifikasi.
Triggers event pengguna: Manakah pernyataan DML menyebabkan Triggers untuk mengeksekusi? Anda dapat menggunakan salah satu dari berikut:
• INSERT
• UPDATE
• DELETE
• AFTER: Jalankan trigger body setelah peristiwa Triggers DML pada tabel.
• INSTEAD OF: Jalankan trigger body instead of pernyataan Triggers. Ini digunakan untuk views yang tidak dinyatakan dimodifikasi.
Triggers event pengguna: Manakah pernyataan DML menyebabkan Triggers untuk mengeksekusi? Anda dapat menggunakan salah satu dari berikut:
• INSERT
• UPDATE
• DELETE
Trigger type: Haruskah trigger body mengeksekusi untuk setiap baris pernyataan yang mempengaruhi atau hanya sekali?
• Statement: The trigger body mengeksekusi sekali untuk the triggering event. Ini adalah default. Sebuah pernyataan trigger dipanggil sekali, bahkan jika tidak ada baris yang terpengaruh sama sekali..
• Row: The trigger body dijalankan sekali untuk setiap baris terpengaruh oleh triggering event. Sebuah row trigger tidak dijalankan jika tidak ada peristiwa triggering event yang mempengaruhi baris .
Trigger body: Tindakan apa yang harus Triggers lakukan?
The trigger body blok PL / SQL atau panggilan ke prosedur.
Syntax untuk membuat DML Statemen Triggers
Syntax:
CREATE [OR REPLACE] TRIGGER trigger_name
timing
event1 [OR event2 OR event3]
ON table_name
trigger_body
Catatan: nama Triggers harus unik sehubungan dengan Triggers lain dalam skema yang sama.
Membuat DML Statement Trigger
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,'You may
insert into EMPLOYEES table only
during business hours.');
END IF;
END;
Membuat DML Row Trigger
Syntax:
CREATE [OR REPLACE] TRIGGER trigger_name
timing
event1 [OR event2 OR event3]
ON table_name
[REFERENCING OLD AS old | NEW AS new]
FOR EACH ROW
[WHEN (condition)]
trigger_body
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;
/
Syntax hapus Trigger
Untuk menghapus trigger dari database, gunakan syntax DROP TRIGGER:
DROP TRIGGER trigger_name;
Contoh:
DROP TRIGGER secure_emp;
Catatan: Semua Triggers pada tabel dihapus ketika tabel dihapus.
Tidak ada komentar:
Posting Komentar