Oracle触发器

  • 定义:
    数据库触发器是一个与表相关联的、存储的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;

Oracle触发器_第1张图片
Oracle触发器_第2张图片

你可能感兴趣的:(Oracle)