oracle触发器
程序员文章站
2022-04-10 12:45:52
触发器 说明 数据库触发器是一个与表相关联的、存储的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;
上一篇: Oracle中的rownum和rowid