Download presentation
Presentation is loading. Please wait.
Published byAntony Quinn Modified over 9 years ago
1
In Oracle
2
A PL/SQL block stored in the database and fired in response to a specified event ◦ DML statements : insert, update, delete ◦ DDL statements : create, alter, drop ◦ Startup or shutdown ◦ An error ◦ A user logon or logoff
3
Create or replace trigger {before|after|Instead of} {Insert | Update | Delete} [of ] On [referencing old as o new as n] [for each row] When ( ) Begin Sql statements End;
4
Triggering SQL statement Trigger action Trigger restriction
5
DML triggers ◦ Defined on a table and fired in response to an insert, delete or update DDL triggers ◦ Defined in response to events such as logon or logoff, create alter drop etc. Instead of triggers ◦ Used for non updateable views
6
DML trigger definition consists of: ◦ Event that fires the trigger ◦ Database table on which the event occurs ◦ Optional condition controlling when trigger executes Types: ◦ Row level Trigger fired or each row updated, inserted or deleted ◦ Statement level Trigger fired for each sql statement executed
7
create or replace trigger before_update_emp before update on emp begin insert into empcheck values('Before update','Statement', sysdate); dbms_output.put_line('Some updation done on Emp'); end; / Update emp set sal=sal+100; Some updation done on emp 14 rows updated Select * from empcheck; EVENT LEVEL_CHECK DATE_CHEC -------------------- -------------------------------- ------------ ------------------ Before update Statement 13-SEP-13
8
create or replace trigger before_update_row_emp_sal before update of sal on emp For each row begin insert into empcheck values('Before update',’Row', sysdate); dbms_output.put_line('Some updation done on Emp Sal column'); end; / SQL> update emp set sal=sal+10 where deptno=10; Some updation done on Emp Some updation done on Emp Sal column 3 rows updated. SQL> select * from empcheck; EVENT LEVEL_CHECK DATE_CHEC -------------------- ------------------------------ --------- Before update Statement 13-SEP-13 Before update Row 13-SEP-13
9
create or replace trigger display_salary_changes before delete or update or insert on emp for each row declare sal_diff number; begin sal_diff:=:new.sal-:old.sal; dbms_output.put_line('Old salary: '||:old.sal); dbms_output.put_line('New salary: '||:new.sal); dbms_output.put_line('Salary Difference: '||sal_diff); end; /
10
create trigger trig_alter_scott before alter on scott.schema begin raise_application_error(-20000,'Cannot alter any table in scott'); end; / alter table emp drop primary key; ERROR at line 1: ORA-00604: error occurred at recursive SQL level 1 ORA-20000: Cannot alter any table in scott
11
Help to make non updateable views updateable Called so because unlike other types of triggers, oracle fires the trigger instead of executing the triggering statement Exist only on views
12
Create a view create or replace view v as select empno,ename,sal from emp where sal>2000; Create a trigger(Instead of) create or replace trigger emp_trig instead of insert on v begin if :new.sal >2000 then insert into emp (empno,ename,sal) values(:new.empno,:new.ename,:new.sal); else raise_application_error(-20001,'Insertion from this view invalid'); end if; end; /
13
Creation of a non updateable view Create view vtest as select deptno,sum(sal) as total from emp group by deptno; Updation through the view not possible update vtest set deptno=20 where deptno=10; ORA-01732: data manipulation operation not legal on this view
14
Creation of Instead of trigger create or replace trigger emp_trig2 instead of update on vtest begin if updating then update emp set deptno=:new.deptno; end if; end; / Updation using trigger update vtest set deptno=20 where deptno=10; 1 row updated.
15
Mutating table exceptions occur triggering table is referenced from within the row level trigger code This error is raised when a trigger attempts to execute a DML statement on the same table that the trigger is defined on
16
create or replace trigger trig_up_emp after update on emp for each row declare i number; begin select sum(sal) into i from emp; dbms_output.put_line('The sum of salary of employees is '||i); end; / ERROR at line 1: ORA-04091: table SCOTT.EMP is mutating, trigger/function may not see it ORA-06512: at "SCOTT.TRIG_UP_EMP", line 4 ORA-04088: error during execution of trigger 'SCOTT.TRIG_UP_EMP'
17
create or replace trigger trig_up_emp after update on emp for each row declare i number; pragma autonomous_transaction; begin select sum(sal) into i from emp; dbms_output.put_line('The sum of salary of employees is '||i); commit; end; /
18
View ALL_TRIGGERS, USER_TRIGGERS Alter trigger tigger_name enable; Alter trigger tigger_name disable; Drop trigger trigger_name; Alter table table_name disable all triggers; Alter table table_name enable all triggers;
19
Refers to SQL statements that are constructed and executed at run time Execute DDL statements Manage Ad hoc query and update requirements of web based applications create or replace procedure dynsql_eg(ddl_string varchar2) is begin execute immediate ddl_string; end;
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.