1.什么是触发器
触发器是一种特殊的存储过程
每当一个特定的数据操作语句(insert,update,delete)在指定的表上发出时,Oracle自动地执行触发器中定义的语句序列。
2.触发器的应用场景
复杂的安全性检查
数据确认
实现审计功能
完成数据的备份和同步
3.最简单的触发器
3.0 触发器基本语法
|
|
3.1 语句级触发器
在指定的操作语句操作之前或之后执行一次,不管这条语句影响了多少行 – 针对的是表
3.2行级触发器
触发语句作用的每一条记录都被触发。在行级触发器中使用 :old 和 :new 伪记录变量,识别值的状态。– 针对的是行
|
|
输出
1行已插入。
Hello New User...
4.触发器应用实例
4.1 案例一:复杂安全性检查 禁止在非工作时间插入员工
|
|
输出:错误报告 -
SQL 错误: ORA-20001: 禁止在非工作时间插入新员工
ORA-06512: 在 "LEARN.TIME_CHECK", line 7
ORA-04088: 触发器 'LEARN.TIME_CHECK' 执行过程中出错
4.2 案例二:数据的确认
|
|
输出:错误报告 -
SQL 错误: ORA-20002: 涨后工资比涨前工资还低?滚!
ORA-06512: 在 "LEARN.CHECK_SALARY", line 3
ORA-04088: 触发器 'LEARN.CHECK_SALARY' 执行过程中出错
4.3案例三:数据库的审计
|
|
4.4 案例四:数据的备份和同步
当给员工涨完工资后,自动备份新的工资到备份表中
创建备份表
4.5 案例5, 防止数据重复插入
此案例结合存储过程锁,可以有效防止高并发问题。
|
|
输出在行: 23 上开始执行命令时出错 -
insert into tb_user(no,name,salary,job,hiredate,deptno) values(12,'Zhangyu',5000,'MANAGER',sysdate,20)
错误报告 -
SQL 错误: ORA-20003: 该用户已经被存储过了
ORA-06512: 在 "LEARN.CHECK_REPEAT", line 12
ORA-04088: 触发器 'LEARN.CHECK_REPEAT' 执行过程中出错