Membuat Trigger pada Oracle



Berikut adalah cara penggunaan Trigger pada Oracle

Format :

CREATE [OR REPLACE ] TRIGGER trigger_name
{BEFORE | AFTER | INSTEAD OF }
{INSERT [OR] | UPDATE [OR] | DELETE}
[OF col_name]
ON table_name
[REFERENCING OLD AS o NEW AS n]
[FOR EACH ROW]
WHEN (condition)
DECLARE
   Declaration-statements
BEGIN
   Executable-statements
EXCEPTION
   Exception-handling-statements
END;


Contoh 1 :

CREATE OR REPLACE TRIGGER tKaryawan
   BEFORE DELETE OR INSERT OR UPDATE
   ON karyawan FOR EACH ROW
DECLARE
   
BEGIN
   
   IF length(:new.nip) < 3 THEN
        raise_application_error(-20015, 'NIP  tidak boleh kurang dari 3 digit');
   END IF;

   DBMS_OUTPUT.put_line ('Nama Lama: ' || :OLD.nama);
   DBMS_OUTPUT.put_line ('Nama Baru: ' || :NEW.nama);
END;
/


Jalankan :

INSERT INTO karyawan VALUES('102','Budi','Kontrak');

Maka akan keluar error

ERROR at line 1:
ORA-20015: Panjang NIP tidak boleh kurang dari 3 digit
ORA-06512: at "NANO.NAME_CHANGES_TRIGGER", line 6
ORA-04088: error during execution of trigger 'NANO.NAME_CHANGES_TRIGGER'


Contoh 2 :

CREATE OR REPLACE TRIGGER  uKaryawan
   AFTER UPDATE  ON karyawan    FOR EACH ROW
DECLARE
   
BEGIN
   
   IF length(:new.nip) < 3 THEN
        raise_application_error(-20015, 'NIP tidak boleh kurang dari 3 digit');
   END IF;

   DBMS_OUTPUT.put_line ('Nama Lama: ' || :OLD.nama);
   DBMS_OUTPUT.put_line ('Nama Baru: ' || :NEW.nama);
END;
/

Jalankan :

SQL> SET serveroutput on;
SQL> UPDATE karyawan SET nama = 'Hartono' WHERE npm = '1023';
Nama Lama: Budi
Nama Baru: Hartono

1 row updated.



Catatan :
untuk menghapus trigger gunakan sintak :

DROP TRIGGER  nama_trigger;

contoh :
DROP TRIGGER  tkaryawan;
DROP TRIGGER  ukaryawan;