TRIGGERS:
===============
Database trigger is a PL/SQL block that is executed on an event in the database.
The event is related to a particular data manipulation of a table such as inserting, deleting or updating a row of a table.
Triggers may be used :
1.To implement complex business rule, which cannot be implemented using integrity constraints.
2.To audit the process. For example, to keep track of changes made to a table.
3. To automatically perform an action when another concerned action takes place. For example, updating a table whenever there is an insertion of a row into another table.
Types of Triggers:
------------------------
Depending upon when a trigger is fired it may be classified as :
a.Statement-level trigger
b.Row-level trigger
c.Before triggers
d.After triggers
e.Instead of triggers
Syntax:
-----------
CREATE [OR REPLACE] TRIGGER triggername
{BEFORE | AFTER | INSTEAD OF}
{DELETE | INSERT | UPDATE [OF columns]}
[OR {DELETE | INSERT |UPDATE [OF columns]}]...
ON table_name|SCHEMA
[REFERENCING [OLD AS old] [NEW AS new]]
[FOR EACH ROW [WHEN condition]]
<PL/SQL block>
Trigger Sample Ex #1
====================
Expand|Select|Wrap|Line Numbers
- CREATE OR REPLACE TRIGGER MYTRIG AFTER INSERT OR DELETE ON EMP
- DECLARE
- MCOUNT NUMBER;
- BEGIN
- SELECT COUNT(*) INTO MCOUNT FROM EMP;
- --checks the number of records in the table.
- DBMS_OUTPUT.PUT_LINE('THE TOTAL NUMBER OF EMPLOYEE ARE:' || MCOUNT);
- --and displays the same after the event .
- END;
================
Expand|Select|Wrap|Line Numbers
- CREATE OR REPLACE TRIGGER ONLYPOSITIVE BEFORE INSERT OR UPDATE OF SAL ON EMP FOR EACH ROW
- BEGIN
- IF :NEW.SAL<0 THEN
- --checks of the value inserted into teh sal column is less than 0.
- RAISE_APPLICATION_ERROR(-20100,'PLEASE INSERT A POSITIVE VALUE');
- --if valus is less than 0 ,then raise the exception.
- END IF;
- END;
trigger example #3
==================
Expand|Select|Wrap|Line Numbers
- CREATE OR REPLACE TRIGGER NODELETE BEFORE INSERT OR UPDATE OR DELETE ON DEPT FOR EACH ROW
- BEGIN
- IF INSERTING THEN
- RAISE_APPLICATION_ERROR(-20020,'CAN''T INSERT NEW RECORDS TO THIS TABLE');
- ELSIF UPDATING THEN
- RAISE_APPLICATION_ERROR(-20021,'CAN''T UPDATE RECORDS OF THIS TABLE');
- ELSIF DELETING THEN
- RAISE_APPLICATION_ERROR(-20022,'YOU ARE NOT AUTHORISED TO DELETE THESE RECORDS');
- END IF;
- END;
Trigger Sample Ex #4
================
Expand|Select|Wrap|Line Numbers
- create or replace trigger mytrig
- before insert on emp
- declare
- a char(3);
- begin
- --selects the system day to the vaiable.
- select to_char(sysdate,'dy') into a from dual;
- if a in('sun','sat') then
- --restrict any transaction on saturday and sunday.
- Raise_application_error(-20004,'Cannot do manipulation today');
- end if;
- end;
Also check TRIGGERS - 2