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的部门信息, 同时使用触发器 删除对应的员工信息

 

转载于:https://www.cnblogs.com/MrTanJunCai/p/9907457.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值