oracle 触发器伪变量,Oracle 触发器的使用

5268f80b9b1e01f982625ef6fac83ca1.png

1.创建语句级触发器insertEmpTrigger,当对表【emp】进行增加【insert】操作前【before】,显示‘插入了一条数据‘

注意是单引号

1 --创建触发器

2 create or replace triggerinsert_trigger3 before4 insert

5 onemp6 foreach row7 begin

8 dbms_output.put_line(‘插入了一条数据‘);9 end;10 /

ba1bbcaf2f27cffb6af47e6c4fd541cb.png

如果不加for each row即使一次插入多条数据,触发器仍然只工作一次(普通的语句触发器),for each row 使得这个触发器变成了一个行触发器

2.星期一到星期五,且9-21点能向数据库emp表插入数据,否则使用函数抛出异常,使用:raise_application_error(‘-20000‘,‘例外原因‘)

说明:raise_application_error(error_number,error_message) 用于抛出自定义的异常 error_number为-20000 到 -20999 之间,error_message表示错误的信息

注意:不能仅仅用整点来控制,必须要考虑分钟的问题

1 create or replace triggersecurity_trigger2 before3 insert

4 onemp5 foreach row6 declare

7 pday varchar2(10);8 phour number(2);9 begin

10 select to_char(sysdate,‘day‘) into pday fromdual;11 select ceil(to_char(sysdate,‘hh24.mi‘)) into phour fromdual;12 if pday in (‘星期六‘,‘星期日‘) or phour not between 9 and 21 then

13 raise_application_error(‘-20000‘,‘非工作日不能插入数据‘);14 end if;15 end;16 /

触发器创建之后,在周一的 21:57时已经不能插入数据

679a59593c0a4d41cf16cae4cc47025f.png

3.创建行级触发器checkSalaryTrigger,涨后工资这一列,确保大于涨前工资(10%) (:new.sal/:old.sal的使用)

:new.列名 与:old.列名 分别表示 某列的新值与旧值,而且这两个变量只有在创建触发器时加上for each row才会出现

此外update二者皆有,insert只有:new,delete只有:old(上面已经说过,触发器不针对select操作)

1 create or replace triggercheckSalary_trigger2 after3 update

4 onemp5 foreach row6 begin

7 --伪变量:new.sal表示更新后的sal字段

8 --10% 要写成 0.1

9 if (:new.sal - :old.sal) < :old.sal*0.1 then

10 raise_application_error(‘-20000‘,‘工资涨幅必须大于10%‘);11 else

12 dbms_output.put_line(‘更新成功!‘);13 end if;14 end;15 /

a711d582500a82b795c4855cac4c7bab.png

Oracle 触发器的使用

标签:error   ptr   div   星期六   temp   src   var   create   检查

1428d0e076c3959ab11d28a39bc84fab.png

5268f80b9b1e01f982625ef6fac83ca1.png

本条技术文章来源于互联网,如果无意侵犯您的权益请点击此处反馈版权投诉

本文系统来源:http://www.cnblogs.com/tele-share/p/7719591.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值