欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

oracle触发器

程序员文章站 2022-07-02 17:26:44
触发器 说明 数据库触发器是一个与表相关联的、存储的PL/SQL程序。每当一个特定的数据操作语句(insert、update、delete)在指定的表上发出时,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;