版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/wangtongxue123456/article/details/79681909
数据库触发器是定义一个与表关联的、存储的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 伪记录变量,识别值得状态。
行级触发器:针对的是行
--禁止某段时间插入数据
-- 条件 周六日不可以 ,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;
/**
数据不能比增加前变少(涨工资案例)
*/
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;