用触发器进行表的同步操作

一个表在另一个表之后进行同步操做步操作用after insert/update/delete on 表名 并加FOR EACH ROW ,用后触发是在执行触发事件之后触发当前所创建的触发器的操作   

declare 声明变量类型。

如在一个表进行增加一条记录后,在另一个表增加一条记录过程为

首先创触发器名称

create or replace trigger 触发器名称

 after insert on 要同步的表名 
 for each row

declare
   UserName varchar2
32; 要插入新数据库的字段

countNumber number;     判断在数据库中存在不存在记录的统计字段

begin

   countNumber := 0;

判断存在不存在一条相同记录

   select count(*) into countNumber from hr.hr_salary_password h where h.Sys_User_Name = :NEW.user_name;

   if countNumber = 0 then

如不存在,把声明的变量赋值,值为新增加到数据库中的记录。

   UserName :=:NEW.user_name;

 

同步操作,把记录插入到要同步的数据库中。

   insertinto hr.hr_salary_password(sys_user_name,)

    values(UserName);

   end if;

加入异常处理

EXCEPTION

 WHEN OTHERS THEN

      dbms_output.put('系统连接异常'); 

 RETURN;

 

       FOR EACH ROW选项说明触发器为行触发器。行触发器要求当一个DML语句操走影响数据库中的多行数据时,对于其中的每个数据行,只要它们符合触发约束条件,均激活一次触发器;而语句触发器将整个语句操作作为触发事件,当它符合约束条件时,激活一次触发器。当省略FOR EACH ROW 选项时,BEFORE AFTER 触发器为语句触发器,而INSTEAD OF 触发器则为行触发器。

       REFERENCING 子句说明相关名称,在行触发器的PL/SQL块和WHEN 子句中可以使用相关名称参照当前的新、旧列值,默认的相关名称分别为OLDNEW。触发器的PL/SQL块中应用相关名称时,必须在它们之前加冒号,但在WHEN子句中则不能加冒号

posted on 2010-12-14 17:13  郄永军  阅读(561)  评论(0)    收藏  举报