博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Oracle 触发器的使用
阅读量:5337 次
发布时间:2019-06-15

本文共 1874 字,大约阅读时间需要 6 分钟。

一.触发器的作用

  触发器的作用类似拦截器.把一些针对数据库的DML操作(insert/update/delete/select)进行拦截,符合业务要求的进行操作,不符合要求的操作可以通过抛出异常来阻止

  说白了就是数据确认(after)与安全性检查(before),此外触发器不针对select操作

二.触发器的使用

  语法不再赘述,百度或者查阅oracle的文档都能找到

  以下的一些例子是基于scott用户下的emp表

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

  注意是单引号

1 --创建触发器 2 create or replace trigger insert_trigger 3 before 4 insert 5 on emp 6 for each row 7 begin 8         dbms_output.put_line('插入了一条数据'); 9 end;10 /

如果不加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 trigger security_trigger 2 before 3 insert 4 on emp 5 for each row 6 declare 7         pday varchar2(10); 8         phour number(2); 9 begin10         select to_char(sysdate,'day')  into pday  from dual; 11         select ceil(to_char(sysdate,'hh24.mi'))   into phour  from dual;12         if pday in ('星期六','星期日') or phour not between 9 and 21  then13                 raise_application_error('-20000','非工作日不能插入数据');14         end if;15 end;16 /

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

 

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

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

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

1 create or replace trigger checkSalary_trigger 2 after 3 update 4 on emp 5 for each row 6 begin 7         -- 伪变量:new.sal表示更新后的sal字段 8         -- 10% 要写成 0.1 9         if (:new.sal - :old.sal) < :old.sal*0.1 then10             raise_application_error('-20000','工资涨幅必须大于10%');11         else 12             dbms_output.put_line('更新成功!');13         end if;14 end;15 /

 

 

转载于:https://www.cnblogs.com/tele-share/p/7719591.html

你可能感兴趣的文章
手动实现二值化
查看>>
What Linux bind mounts are really doing
查看>>
linux top命令详解
查看>>
博弈论小结
查看>>
模拟Post登陆带验证码的网站
查看>>
NYOJ458 - 小光棍数
查看>>
java中常用方法
查看>>
【Programming Clip】06、07年清华计算机考研上机试题解答(个别测试用例无法通过)...
查看>>
canvas动画
查看>>
4,7周围玩家
查看>>
关于webpack升级过后不能打包的问题;
查看>>
vue - 生命周期
查看>>
Python正则表达式
查看>>
Linux进程间通信--命名管道
查看>>
UVa 10970 - Big Chocolate
查看>>
js输出
查看>>
H5多文本换行
查看>>
HAL层三类函数及其作用
查看>>
Odoo 去掉 恼人的 "上午"和"下午"
查看>>
web@h,c小总结
查看>>