码迷,mamicode.com
首页 > 数据库 > 详细

oracle触发器

时间:2018-11-05 10:10:05      阅读:176      评论:0      收藏:0      [点我收藏+]

标签:监听   var   row   sda   prim   ora   log   insert   action   

一.什么是触发器

类似于 java 中的事件监听器


按钮.addActionListener(监听器对象);


点击按钮时 会触发 事件监听器中的代码执行


我们可以给表设置一个触发器,这样当用户对表进行了增删改操作的时候,

会触发 触发器中的代码执行

 

*****************************************how*****************************

需求:记录谁在什么时间对该表进行了什么操作

create table emp2_log(
id number(10) primary key,
uname varchar2(20),
action varchar2(10),
atime date
)


create sequence seq_emp2_log minvalue 0 start with 0 increment by 1;


create or replace trigger trigger_emp2
after insert or delete or update on emp2
[for each row]
declare
begin
if inserting then
insert into emp2_log values(seq_emp2_log.nextval,USER,‘insert‘,sysdate);
elsif updating then
insert into emp2_log values(seq_emp2_log.nextval,USER,‘update‘,sysdate);
elsif deleting then
insert into emp2_log values(seq_emp2_log.nextval,USER,‘delete‘,sysdate);
end if;
end;


*****************************触发器的分类****************************

一.根据触发时机分

before触发器和after触发器


二.表级触发器和行级触发器


表级触发器: 只触发一次. 不需要加 for each row

行级触发器: update 语句 总共更新了3行,每更新1行 触发1次.

需要加for each row

**************需求:使用触发器级联修改表中数据****************************

例如: 把部门编号为30的部门编号修改成80,这样应该同时把emp表中部门编号为30的员工的
编号改成80

create or replace trigger trigger_dept
after update on dept
for each row
declare
begin
update emp set deptno=:NEW.deptno where deptno=:OLD.deptno;

--:OLD dept表修改前的记录\
--:NEW dept表修改后的记录

end;

select * from dept


update dept set deptno=80 where deptno=30


select * from emp


**************作业:使用触发器实现级联删除****************************


删除部门编号为30的部门信息, 同时使用触发器 删除对应的员工信息

 

oracle触发器

标签:监听   var   row   sda   prim   ora   log   insert   action   

原文地址:https://www.cnblogs.com/MrTanJunCai/p/9907457.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!