Oracle触发器

触发器

什么是触发器

数据库触发器是定义一个与表关联的、存储的pl/sql程序。

每当一个特定的数据库操作语句(insert/update/delete)在指定的表上发出时,oracle自动执行触发器中定义的语句序列。

创建触发器的语法

CREATE | or REPLACE | TRIGGER 触发器名

{BEEFORE | AFTER }
{DELETE | INSERT | (UPDATE | OF 列名)
}
ON 表名
[FOR EACH ROW [WHEN(条件)]]
PLSQL 块

--BEEFORE | AFTER  用来指明操作前还是操作后调用
-- 对于更新操作可以使用一个 of
但更新 of 指定的列时才执行触发器。
-- FOR EACH ROW 
指明触发器的类型

触发器的类型

  • 语句级的触发器

在指定的操作语句操作之前或之后执行一次,不管这条语句影响了多少行。

  • 行级触发器

触发语句作用的每一条记录都被触发。在行级触发器中使用:old和:new 伪记录变量,识别值得状态。

  1. :old和:new 代表 同一条记录
  2. :old 表示操作改行之前的,这一行的值
  3. :new 表示操作改行之后的,这一行的值

    语句级触发器:针对的是表


行级触发器:针对的是行

应用场景

  1. 复杂的安全性检查
--禁止某段时间插入数据
-- 条件 周六日不可以 ,9点和18点之外不行
create or replace trigger securityemp
before insert
on A
begin
  if to_char(sysdate,'day') in ('星期六','星期日') or 
      to_number(to_char(sysdate,'hh25')) not between 9 and 18 then
      RAISE_APPLICATION_ERROR(-20001, '禁止在非工资时间插入数据');
  end if;    
end;
  1. 数据的确认
/**
 数据不能比增加前变少(涨工资案例)
*/
create or replace trigger checksalary
before update
on A
for each row --定义触发器类型为行级,更改每一行都执行触发器
begin
  if :new.num< :old.num then
  --抛出异常
   RAISE_APPLICATION_ERROR(-200002, '数据不能比增加前变少(');
  end if;
end;
  1. 数据库审计(跟踪数据库的操作,oracle已经单独的提供了数据库审计)
  2. 数据的备份和同步
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值