一.什么是触发器
类似于 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,‘update‘,sysdate); elsif deleting then insert into emp2_log values(seq_emp2_log.nextval,‘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的部门信息,同时使用触发器 删除对应的员工信息
(编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|