Oracle Database
Trigger
Eryk Budi Pratama – Dimas Aryo Anggoro
Advanced Database Lab
Informatics Engineering –Bakrie University
Definition
• Trigger is a series of PL/SQL statements attached
to a database table that execute whenever a
triggering event (select, update, insert, delete)
occurs.
• Unlike stored procedures and functions, they
not explicitly called, but they are activated when
a triggering event occurs.
• Main purpose is to implement the complex
integrity constraints that can’t be done with the
CREATE TABLE or ALTER TABLE command.
Trigger Types
• Application Trigger
Trigger will be activated if there is an event on
certain application
• Database Trigger
Trigger will be activated if there is a data event
(DML Operation – Insert, Update, Delete) or
system event (logon or shutdown) on a schema
or database
Trigger Timing
• BEFORE
where a trigger will be activated before DML process on
table occur
• AFTER
where a trigger will be activated after DML process on
table occur
• INSTEAD OF
Trigger that just functionate on VIEW and usually used to
update data on complex view
Syntax
CREATE [OR REPLACE]
TRIGGER trigger_name
BEFORE (or AFTER)
INSERT OR UPDATE [OF COLUMNS] OR DELETE
ON tablename
[FOR EACH ROW [WHEN (condition)]]
BEGIN
...
END;
Example
Sample Table
CREATE TABLE PERSON (
ID INT,
NAME VARCHAR(30),
DOB DATE,
PRIMARY KEY(ID)
);
Before Insert Trigger
CREATE OR REPLACE
TRIGGER PERSON_INSERT_BEFORE
BEFORE
INSERT
ON PERSON
FOR EACH ROW
BEGIN
DBMS_OUTPUT.PUT_LINE(’BEFORE INSERT OF ’ ||
:NEW.NAME);
END;
(cont.)
• The single INSERT statement fires the trigger. When we
run it, we get the print out of ’BEFORE INSERT OF JOHN
DOE’.
SQL> INSERT INTO PERSON(ID,NAME,DOB) VALUES (1, ’ANI’
,SYSDATE);
BEFORE INSERT OF ANI
1 row created.
After Insert Trigger
CREATE OR REPLACE
TRIGGER PERSON_INSERT_AFTER
AFTER
INSERT
ON PERSON
FOR EACH ROW
BEGIN
DBMS_OUTPUT.PUT_LINE(’AFTER INSERT OF ’ || :NEW.NAME);
END;
(cont.)
SQL> INSERT INTO PERSON(ID,NAME,DOB) VALUES (2, ’BUDI’
,SYSDATE);
BEFORE INSERT OF BUDI
AFTER INSERT OF BUDI
1 row created.
Before Update Trigger
CREATE OR REPLACE
TRIGGER PERSON_UPDATE_S_BEFORE
BEFORE UPDATE
ON PERSON
BEGIN
DBMS_OUTPUT.PUT_LINE(’BEFORE UPDATING SOME
PERSON(S)’);
END;
(cont.)
SQL> UPDATE PERSON SET DOB = SYSDATE;
BEFORE UPDATING SOME PERSON(S)
2 rows updated
Managing Trigger
• Enable Trigger
ALTER TRIGGER trigger_name ENABLE
• Disable Trigger
ALTER TRIGGER trigger_name DISABLE
• Enable or Disable All Trigger
ALTER TABLE table_name DISABLE | ENABLE ALL TRIGGERS
• Delete TRIGGER
DROP TRIGGER nama_trigger
Permissions
Just like with procedures and functions, creating triggers
requires certain privileges which are not part of the default
privilege set.
GRANT CREATE TRIGGER TO <username>;
Q&A

Oracle Database Trigger

  • 1.
    Oracle Database Trigger Eryk BudiPratama – Dimas Aryo Anggoro Advanced Database Lab Informatics Engineering –Bakrie University
  • 2.
    Definition • Trigger isa series of PL/SQL statements attached to a database table that execute whenever a triggering event (select, update, insert, delete) occurs. • Unlike stored procedures and functions, they not explicitly called, but they are activated when a triggering event occurs. • Main purpose is to implement the complex integrity constraints that can’t be done with the CREATE TABLE or ALTER TABLE command.
  • 3.
    Trigger Types • ApplicationTrigger Trigger will be activated if there is an event on certain application • Database Trigger Trigger will be activated if there is a data event (DML Operation – Insert, Update, Delete) or system event (logon or shutdown) on a schema or database
  • 4.
    Trigger Timing • BEFORE wherea trigger will be activated before DML process on table occur • AFTER where a trigger will be activated after DML process on table occur • INSTEAD OF Trigger that just functionate on VIEW and usually used to update data on complex view
  • 5.
    Syntax CREATE [OR REPLACE] TRIGGERtrigger_name BEFORE (or AFTER) INSERT OR UPDATE [OF COLUMNS] OR DELETE ON tablename [FOR EACH ROW [WHEN (condition)]] BEGIN ... END;
  • 6.
  • 7.
    Sample Table CREATE TABLEPERSON ( ID INT, NAME VARCHAR(30), DOB DATE, PRIMARY KEY(ID) );
  • 8.
    Before Insert Trigger CREATEOR REPLACE TRIGGER PERSON_INSERT_BEFORE BEFORE INSERT ON PERSON FOR EACH ROW BEGIN DBMS_OUTPUT.PUT_LINE(’BEFORE INSERT OF ’ || :NEW.NAME); END;
  • 9.
    (cont.) • The singleINSERT statement fires the trigger. When we run it, we get the print out of ’BEFORE INSERT OF JOHN DOE’. SQL> INSERT INTO PERSON(ID,NAME,DOB) VALUES (1, ’ANI’ ,SYSDATE); BEFORE INSERT OF ANI 1 row created.
  • 10.
    After Insert Trigger CREATEOR REPLACE TRIGGER PERSON_INSERT_AFTER AFTER INSERT ON PERSON FOR EACH ROW BEGIN DBMS_OUTPUT.PUT_LINE(’AFTER INSERT OF ’ || :NEW.NAME); END;
  • 11.
    (cont.) SQL> INSERT INTOPERSON(ID,NAME,DOB) VALUES (2, ’BUDI’ ,SYSDATE); BEFORE INSERT OF BUDI AFTER INSERT OF BUDI 1 row created.
  • 12.
    Before Update Trigger CREATEOR REPLACE TRIGGER PERSON_UPDATE_S_BEFORE BEFORE UPDATE ON PERSON BEGIN DBMS_OUTPUT.PUT_LINE(’BEFORE UPDATING SOME PERSON(S)’); END;
  • 13.
    (cont.) SQL> UPDATE PERSONSET DOB = SYSDATE; BEFORE UPDATING SOME PERSON(S) 2 rows updated
  • 14.
    Managing Trigger • EnableTrigger ALTER TRIGGER trigger_name ENABLE • Disable Trigger ALTER TRIGGER trigger_name DISABLE • Enable or Disable All Trigger ALTER TABLE table_name DISABLE | ENABLE ALL TRIGGERS • Delete TRIGGER DROP TRIGGER nama_trigger
  • 15.
    Permissions Just like withprocedures and functions, creating triggers requires certain privileges which are not part of the default privilege set. GRANT CREATE TRIGGER TO <username>;
  • 16.

Editor's Notes

  • #17 http://risnotes.com/2012/02/trigger-di-oracle/