Professional Documents
Culture Documents
Kamran.Munir@niit.edu.pk
Triggers Overview
Trigger Components
Triggering Event:
z
z
z
z
Trigger Components
Timing:
Before
The code will execute before the DML event
After
The code will execute after the DML event
Trigger Body:
z
<Syntax>
[DECLARE]
BEGIN
[EXCEPTION]
END;
Creating Trigger
* ERROR
ORAORA-20500: YOU CAN ONLY INSERT DATA INTO EMP
DURING WEDNESDAY TO FRIDAY
Example # 2
SQL>
1 UPDATE EMP
2* SET EMPNO = 1245
UPDATE EMP
*
ERROR at line 1:
ORAORA-20504: YOU CAN ONLY UPADTE DURING OFFICE HOURS
Triggers contd
contd
Creating a Row Triggers
Kamran.Munir@niit.edu.pk
Review:
Trigger Type
How many times should the
trigger body execute when
the triggering event takes
place?
1- Statement [Default]
The trigger body executes once
for the triggering event.
2- Row
2- Row
The trigger body executes
once for each row affected by The trigger body executes once for each
row affected by the triggering event.
the triggering event.
This condition is
checked for each row
10
Problem
Create a row trigger to keep a
running count of DML
operations by different users
on a database table [EMP].
Username
Table name
C_Delete
C_Insert
C_Update
SCOTT
ALI
XYZ
EMP
EMP
EMP
4
0
0
5
1
3
4
9
1
Problem Solution
Here we will create a [AFTER TIMING] trigger as we want to
Keep track of all successful DML operations
And
We will use trigger FOR EACH ROW as we want to
count number of rows affected
by the DML statement (in case of Delete or update).
11
1 row created.
C_DELETE C_UPDATE
--------- -------0
0
- --------0
1
0
0
12
C_DELETE C_UPDATE
--------0
0
--------15
0
--------1
0
Difference between
Triggers and Procedures
13
Triggers
Procedures
Invoked Explicitly
14
15
16
INSERT
SQL> insert into emp(empno, ename, sal)
NEW_SAL
--------5000
UPDATE
SQL> update emp
2 set sal = 6000
3 where empno = 1111;
1 row updated.
SQL> select * from audit_emp_values;
audit_emp_values;
USER_NAME TIMESTAMP ID OLD_ENAME NEW_ENAME OLD_SAL NEW_SAL
-------------------- ----------------- -------------------- -------------------- --------- --------SCOTT
10TEST
5000
10-DECDEC-04
SCOTT
10TEST
5000
6000
10-DECDEC-04 1111 TEST
17
DELETE
SQL> delete from emp where ename = 'TEST';
1 row deleted.
USER_NAME
TIMESTAMP
ID
---------------- ----------------SCOTT
10-DEC-04
SCOTT
10-DEC-04 1111
SCOTT
10-DEC-04 1111
Give suggestions.
18
Managing Triggers
Removing Trigger
19
Q
&
Thanks
20