oracle触发器简要

语法讲解------触发器的构建语法

create [or replace] trigger trigger_name
    before|after
        event1 [ or event2 or event3 …]
            on table_name [for each row]
begin
    statement;
    …
end;

event通常是insert、delete或update等DML操作

for example:

  1.先创建一张表,用来记录emp2上的操作:

create table emp2_log(
      uname varchar2(20),
      action varchar2(10),
      atime date
);

  2.然后创建触发器:

create or replace trigger trig
      after insert or delete or update on emp2
begin
      if inserting then
          insert into emp2_log values(USER,'insert',sysdate);
      elsif updating then
          insert into emp2_log values(USER,'update',sysdate);
      elsif deleting then
          insert into emp2_log values(USER,'delete',sysdate);
      end if;
end;
概述
1.触发器分为语句级触发器行级触发器
2.语句级触发器是指每执行一条DML语句,该触发器就执行一次
3.行级触发器是指每个DML操作影响几条记录,就会触发几次
4.行级触发器中由于涉及到了每条记录的数据变动,所以对于每条记录的数据来说就有新值和旧值之分:
 用关键字:NEW:OLD来代表新的记录和旧的记录(可用于制作自增长ID)。
for example:

解决完整性外键约束的例子:

1.由于数据完整性所以执行:

update dept set deptno = 99 where deptno = 10;
时因为emp表中的外键关系所以报外键的错误。
2.可以使用触发器顺利执行:
create or replace trigger trig
      after update on dept  for each row
begin
      update emp set deptno =:NEW.depno where deptno = :OLD.deptno;
end;

因为触发器执行完毕后,数据库才会检查完整性的约束条件。

原文地址:https://www.cnblogs.com/tv151579/p/2797039.html