说明

数据库触发器是一个与表相关联的、存储的PL/SQL程序。

每当一个特定的数据操作语句(Insert,update,delete)在指定的表上发出时,Oracle自己主动地运行触发器中定义的语句序列。

触发器的类型

语句级触发器:在指定的操作语句操作之前或之后运行一次,无论这条语句影响了多少行 。

行级触发器(FOR EACH ROW):触发语句作用的每一条记录都被触发。

在行级触发器中使用old和new伪记录变量, 识别值的状态。

触发器可用于:1)数据确认  2)实施复杂的安全性检查.3)做审计,跟踪表上所做的数据操作等.4)数据的备份和同步

触发器语法:

CREATE  [or REPLACE] TRIGGER  触发器名
{BEFORE | AFTER}
{DELETE | INSERT | UPDATE [OF 列名]}
ON 表名
[FOR EACH ROW [WHEN(条件) ] ]
PLSQL 块

触发语句与伪记录变量的值:

触发语句

:old

:new

Insert

全部字段都是空(null)

将要插入的数据

Update

更新曾经该行的值

更新后的值

delete

删除曾经该行的值

全部字段都是空(null)

案例1:限制非工作时间向数据库插入数 周六 周日 以及工作时间的非8点到18点的时间段是不能够在emp2表中插入数据的!

create or replace
trigger myTrigger
before insert on emp2
begin
if to_char(sysdate,'day') in('星期六','星期日') or
to_number(to_char(sysdate,'hh24')) not between 8 and 18 then
raise_application_error(-20001,'不能在飞工作时间插入数据');
end if;
end;

案例二: 确认数据(检查emp表中sal 的改动值不低于原值)也就是说你仅仅能给员工涨工资儿不能减工资!

create or replace
trigger checkSal
before update of sal on emp2
for each row
declare
begin
if :new.sal<:old.sal then
raise_application_error(-20002,'更新薪水比之前的小。');
end if;
end;

最新文章

  1. 对于前端,「微信小程序」其实不美好
  2. android第一行代码-5.监听器的两种用法和context
  3. System Error Codes
  4. JQuery 添加节点
  5. cocoapods Analyzing dependencies 问题的解决方案
  6. PHP两个数组相加
  7. 《BI那点儿事》SQL Server 2008体系架构
  8. OOP
  9. iOS高级必备
  10. CIDR
  11. Asynchronously with NSURLConnection
  12. [Android] 修改设备访问权限
  13. Android中API建议的方式实现SQLite数据库的增、删、改、查的操作
  14. python成长之路——第四天
  15. Python3组合数据类型(元组、列表、集合、字典)语法
  16. 网址导航18C
  17. Centos6下安装中文字体
  18. python3 获取Linux系统信息
  19. opencv error: undefined reference to `png_set_expand_gray_1_2_4_to_8@PNG16_0&#39;
  20. 使用python实现日志功能

热门文章

  1. HDU2564 词组缩写
  2. 小HY的四元组
  3. 汇编程序44:检测点13.1 (jmp near ptr 标号指令的中断例程)
  4. flask中内置的session
  5. maven 纯注解一步一步搭建Spring Mvc项目(入门)
  6. OpenCV绘制检测结果
  7. JS——i++与++i
  8. CSS——层叠性
  9. Go 时间相关
  10. GatewayWorker + LayIM实现即时聊天