用触发器进行表的同步操作
一个表在另一个表之后进行同步操做步操作用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 子句中可以使用相关名称参照当前的新、旧列值,默认的相关名称分别为OLD和NEW。触发器的PL/SQL块中应用相关名称时,必须在它们之前加冒号,但在WHEN子句中则不能加冒号