oracle触发器

触发器 说明

数据库触发器是一个与表相关联的、存储的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 列名])   [FOR EACH ROW[WHEN(条件)]] PLSQL 块

创建一个非工作时间不能修改数据的触发器。

–获取当前是几点 to_char(sysdate,’hh24′) –将字符转换为数字 to_number(to_char(sysdate,’hh24′)) –判断非工作时间 not (to_number(to_char(sysdate,’hh24′)) between 9 and 17) –阻止执行 raise_application_error(-20000,’非工作时间禁止修改数据’);

在触发器中阻止SQL继续执行的方法,抛出一个错误。错误号码应该在-20000到-20999之间,否则提示”错误号参数超出范围”。

create or replace trigger mytrigger before insert on table_001 declare begin   if not (to_number(to_char(sysdate,’hh24′)) between 9 and 17) then     raise_application_error(-20000,’非工作时间禁止更新数据’);   end if; end;

创建一个增加工资不能低于原工资的触发器。

declare begin   if 新工资 < 原工资 then     raise_application_error(-20001,’工资不能低于原工资’);   end if; end

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

触发语句

:old

:new

insert

所有字段都是空(null)

将要插入的数据

update

更新以前该行的值

更新后的值

delete

删除以前该行的值

所有字段都是空(null)

create or replace trigger checkSal before update on table_002 for each row declare begin   if :new.sal < :old.sal then     raise_application_error(-20001,’涨工资不能低于原工资’);   end if; end; /

查看所有的触发器对象。

select * from user_triggers;

删除触发器。

drop trigger checkSal;

 

(0)
上一篇 2022年3月22日
下一篇 2022年3月22日

相关推荐