You are on page 1of 3

Triggers

--------------------------------------------------------------------------------
-
create table EMPTRI as select * from emp;
--------------------------------------------------------------------------------
-
Trigger Example
create table TRI_TST(slno number, user_name varchar2(20), user_date date);
create or replace trigger bfrupdEMPTRI
before update on EMPTRI
BEGIN
insert into TRI_TST values(SRITST.NEXTVAL, SYS.LOGIN_USER, sysdate);
END;
update emptri set sal=4100 where empno=7369;
select * from TRI_TST;
create or replace trigger bfrupdEMPTRIr
before update on EMPTRI
for each row
BEGIN
insert into TRI_TST values(SRITST.NEXTVAL, SYS.LOGIN_USER, sysdate);
END;
update emptri set sal=sal+100 where deptno=10;
select * from TRI_TST;
--------------------------------------------------------------------------------
-
create or replace trigger aftupdEMPTRI
after update on EMPTRI
for each row
BEGIN
insert into TRI_TST values(SRITST.NEXTVAL, 'row after Update' , sysdate);
END;
-------------
create or replace trigger bfrinsEMPTRI
before insert on EMPTRI
for each row
BEGIN
insert into TRI_TST values(SRITST.NEXTVAL, 'row before insert' , sysdate);
END;
-------------
create or replace trigger aftinsEMPTRI
after insert on EMPTRI
for each row
BEGIN
insert into TRI_TST values(SRITST.NEXTVAL, 'row after insert' , sysdate);
END;
-------------
create or replace trigger bfrdelEMPTRI
before delete on EMPTRI
for each row
BEGIN
insert into TRI_TST values(SRITST.NEXTVAL, 'row before delete' , sysdate);
END;
-------------
create or replace trigger aftdelEMPTRI
after delete on EMPTRI
for each row
BEGIN
insert into TRI_TST values(SRITST.NEXTVAL, 'row after delete' , sysdate);
END;
-------------
create or replace trigger bfrstmtEMPTRI
before update on EMPTRI
BEGIN
insert into TRI_TST values(SRITST.NEXTVAL, 'stmt before' , sysdate);
END;
-------------
create or replace trigger aftstmtEMPTRI
after update on EMPTRI
BEGIN
insert into TRI_TST values(SRITST.NEXTVAL, 'stmt after' , sysdate);
END;
-------------
update emptri set sal=19100 where empno=7499;
insert into emptri(empno, ename, sal) values(9999, 'CSC', 10000);
delete from emptri where empno=9999;
----------------------------------------------------------------------
Correlation Identifiers
NEW OLD Demo:
create table TRI_NEWOLD (old varchar2(20), new varchar2(20))
create or replace trigger aftupdEMPTRI
after update on EMPTRI
for each row
BEGIN
insert into TRI_NEWOLD values(:old.ename, :new.ename);
END;
select empno, ename from emp where deptno=10;
update emptri set ename=ename||'new' where deptno=10;
select * from TRI_NEWOLD;
----------------------------------------------
Correlation Identifiers
old as ABC
new as XYZ
truncate table TRI_NEWOLD;
create or replace trigger aftupdEMPTRI
after update on EMPTRI
referencing old as ABC new as XYZ
for each row
BEGIN
insert into TRI_NEWOLD values(:ABC.ename, :XYZ.ename);
END;
update EMPTRI set ename=ename||'X' where deptno=10;
select * from TRI_NEWOLD;
--------------------------------------------------------
Trigger Predicates
drop trigger aftupdEMPTRI;
create or replace trigger aftupdEMPTRI
after update on EMPTRI
for each row
BEGIN
IF INSERTING then
insert into TRI_NEWOLD(OLD) values('Insertion Oprn');
ELSIF UPDATING THEN
insert into TRI_NEWOLD(OLD) values('Update Oprn');
ELSE
insert into TRI_NEWOLD(OLD) values('Delete Oprn');
END IF;
END;
update EMPTRI set sal=3950 where empno=7369;
select * from TRI_NEWOLD;
--------------------------------------------------------
WHEN Clause
drop trigger aftupdEMPTRI;
create or replace trigger aftupdEMPTRI
after update on EMPTRI
for each row
when (old.sal > 2000)
BEGIN
insert into TRI_NEWOLD values(:old.sal, :new.sal);
END;
--------------------------------------------------------
SYSTEM Triggers
SCHEMA Level
create table tabsys(user_name varchar2(20), sdate date);
create or replace trigger LogonAft
after LOGON ON SCHEMA
BEGIN
insert into tabsys values(SYS.LOGIN_USER, sysdate);
END;
Database Level
create table tabsys(user_name varchar2(20), sdate date);
drop trigger LogonAft;
truncate table tabsys;
create or replace trigger LogonAft
after LOGON ON DATABASE
BEGIN
insert into scott.tabsys values(SYS.LOGIN_USER, sysdate);
END;
-----------------------------------------------------------------------

You might also like