Oracle触发器

Oracle触发器

触发器是一个能够自动执行的PLSQL块。
当表的状态发生改变的时候,那么该表中对应的触发器就会自动触发,然后执行触发器中PLSQL块。

触发器监控表的记录是否 修改【insertupdatedelete

创建触发器

create or replace trigger 触发器的名称
after|before --触发时间:在执行DML操作之前before或之后after触发;
insert|update|delete --触发事件:常用的触发事件有添加insert、修改update、删除deleteon 表名 --on 指定表名 ,用of指定列名

[for each row]  --如果指定该参数,那么每影响一条记录就会触发一次

declare

begin 
  --触发动作:就是一个PLSQL块;
end;
--创建一个触发器
create or replace trigger tri_add_emp
before  --触发事时间
insert on emp  --触发事件
for each row
begin
  dbms_output.put_line('触发动作...'); --触发动作
end;
--创建一个触发器:当前emp表有数据插入的时候,我们在控制台输出:你插入成功啦!
create or replace trigger tri_emp_insert_data_success
after
insert
on emp
declare

begin 
   dbms_output.put_line('你插入成功啦!');
end;


--测试:
insert into emp (empno,ename) values (8888,'aaaa');
commit;


select * from emp;

--监控员工表,监控update动作,不能给员工降薪
/*
我们想获取更新之后与更新之前的值:
       必须使用行级触发器
       for each row    
         使用::old   旧的值  , :new  新的值


弹窗函数; raise_application_error(v1,p1) 
         v1: 取值  -20999 到 20001 
         p1:  提示信息
*/

create or replace trigger tri_emp_update_sal
before  
update
on emp
--行级触发器
for each row
declare

begin
   if :old.sal > :new.sal  then
      raise_application_error(20001,'亲,不能给员工降薪哦!'); 
   end if;
end;


--测试
update emp set sal = sal-1 where empno=7369;
commit;


select * from emp;
--创建一个触发器,实现主键自增长

--创建序列:
create sequence seq_emp_empno;

--创建一个触发器
create or replace trigger tri_generate_pk

before  --在插入数据之前触发存储函数

insert on emp  --插入数据事件

for each row  --每影响一条记录就会触发一次

begin
  select seq_emp_empno.nextval into :new.empno from dual;
end;
--定义一个触发器,删除emp表中数据之前,先备份要删除的数据
create trigger tri_del_emp
before    --在删除表中数据之前触发
delete on emp   --删除事件
for each row
begin
  --触发动作,如果删除了数据,那么就进行备份
  insert into emp_bak(empno,ename,sal)
  values(:old.empno,:old.ename,:old.sal);
end;

触发器的管理

--禁用或启动触发器
alter trigger 触发器 disable|enable;

--禁用或启动表中的所有触发器
alter table 表名 disable|enable all triggers;

--删除触发器
drop trigger 触发器;
  • 6
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值