oracle触发器

Posted 菜菜小谭

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了oracle触发器相关的知识,希望对你有一定的参考价值。

一.什么是触发器

类似于 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触发器的主要内容,如果未能解决你的问题,请参考以下文章

oracle登录触发器造成无法登录

oracle 创建触发器问题

oracle 触发器自治事务

oracle触发器出错

oracle 中如何删除或修改 触发器?

oracle触发器的相关问题,请教