Oracle:触发器

一、定义:数据库触发器是一个与表相关联的,存储PLSQL程序。每当一个特定的数据操作语句(insert,update,delete)在指定的表上发出时,oracle自动地执行触发器中定义的语句序列。
二、触发器类型:
1、语句级触发器:在指定的操作语句操作之前或之后执行一次,不管这条语句影响了多少行。
2、行级触发器:出发语句作用的每一条记录都被触发,在行级触发器中使用:old和:new伪记录变量,识别状态。
三、创建语法:
CREATE [OR RERLACE] TRIGGER 触发器名
{BEFORE|AFTER}
{INSERT|DELETE|  --语句级
UPDATE OF 列名}  --行级
ON 表名
[FOR EACH ROW]
PLSQL块【declare...begin...end;/】

四、删除触发器语法: drop trigger 触发器名;
五、触发器语句与伪记录变量的值:
触发语句
:old
:new
insert    所有字段都是空(null)将要插入的数据
update更新以前该行的值更新后行的值
delete删除以前该行的值所有字段都是空(null)

例:创建语句级触发器test,当对emp表进行增加操作之前,显示“aaa”
create or replace trigger test
before
insert
on emp
begin
 droms_output.put_line('aaa');
end;
/
例:创建语句级触发器test,当对emp表进行删除操作之后,显示“aaa”
create or replace trigger test
after
delete
on emp
begin
 droms_output.put_line('aaa');
end;
/
例:星期一到星期五,且7-23点能向数据库emp表插入数据,否则抛出异常
create or replace trigger test
before
insert
on emp
declare
 pday varcher2(10);
 phour number(2);
begin
--获取星期
 select to_char(sysdate,'day') into pday from dual;
--获取时间
 select to_char(sysdate,'hh24') into phour from dual;
if pday in('星期六','星期日') or phour not between 7 and 23 then
raise_application_error('111','不能插入');
end if;
end;
/
例:创建行级触发器test,涨工资这一列确保大于涨前工资
create or replace trigger test
after
update of sal
on emp
for each row
declare
 if :new.sal <=:old.sal then
 --抛例外
 raise_application_error('111','例外');
end if;
end;
/
最后,实践表明:删除触发器,表还在;将表放入回收站,触发器依然正常工作,但若表彻底删除了,原来的触发器也就被删除了。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值