- 定义:
数据库触发器是一个与表相关联的、存储的PL/SQL程序。每当一个特定的
数据操作语句(Insert, update, delete)在指定的表上发出时, Oracle自动地执行触发
器中定义的语句序列。 - 分类:
前置触发器(before)
后置触发器(after) - 语法:
create [or replace] trigger 触发器名
before | after
[delete][[or] insert][[or] update [of 列名]]
on 表名
[for each row] [where(条件)]
declare
...
begin
PLSQL块
end;
for each row:标注触发器是行级触发器。还有语句级触发器。
- 触发语句中的伪记录变量值
触发语句 | :old | :new |
---|---|---|
insert | 所有字段都是空(null) | 将要插入的数据 |
update | 更新以前改行的值 | 更新后的值 |
delete | 删除以前该行的值 | 所有字段都是空(null) |
- 前置触发器
当更新students表中学生年龄的时候,年龄自动减1。
create or replace trigger tri_students_updateage
before
update of age
on students
for each row
declare
begin
:new.age := :new.age - 1;
end;
- 后置触发器
当修改学生名字的时候,记录修改前与修改后的值。
--创建学生表修改日志表
create table students_log
(
updatetime date,
stu_id number,
oldname varchar(30),
newname varchar(30)
);
--创建后置触发器,自动记录学生姓名更改前后日志
create or replace trigger tri_students_updatename
after
update of name
on students
for each row
declare
begin
insert into students_log
values
(sysdate, :old.stu_id, :old.name, :new.name);
end;
测试:
update students set name='李明明' where stu_id=1001;
commit;
select * from students;
select * from students_log;