Oracle行级触发器的使用操作
oracle行级触发器的使用操作
oracle行级触发器的使用
1、创建触发器并使用dblink在插入时进行数据同步
异库异表同步
create or replace trigger triggername --触发器名称 after insert on tablename --操作的表 for each row ——行级触发器 declare --这里是关键的地方,在变量申明的地方,指定自定义事务处理。 pragma autonomous_transaction; begin insert into "test_user"@mysqltwo ("userid","username") values (:new.userid,:new.username); --这里需要显示提交事务 commit; end;
同库异表同步
create or replace trigger triggername --触发器名称 after insert on tablename --操作的表 for each row ——行级触发器 begin insert into test_user (userid,username) values (:new.userid,:new.username); --这里不需要显示提交事务 --commit; end;
oracle 行级触发器trigger中有:new,:old两个特殊变量,当触发器为行级触发器的时候,触发器就会提供new和old两个保存临时行数据的特殊变量,我们可以从俩个特殊的变量中取出数据执行扩张表的dml操作
扩展
after 与 before驱别在两种情况下可体现差别
第一种情况:dml语句执行失败时,如触发器使用before,则不会考虑语句是否执行成功,皆触发;如使用after,因为报错不会继续执行而产生触发;
第二种情况:在进行dml操作前,验证对应操作合法性,那么触发器必须使用before
关于ora-04091异常的出现原因:
在oracle中执行dml语句的时候是需要显示进行提交操作的。当我们进行插入的时候,会触发触发器执行对触发器作用表和扩展表的种种操作,但是这个时候触发器和插入语句是在同一个事务管理中的,因此在插入语句没有被提交的情况下,我们无法对触发器作用表进行其他额外的操作。如果执行其他额外的操作则会抛出如上异常信息
我们知道,出错的原因是因为触发器和dml语句在同一事务管理中,所以方案一便是将触发器和dml语句分成两个单独的事务处理。这里可以使用pragma autonomous_transaction; 告诉oracle触发器是自定义事务处理。
关于oracle行级触发器的使用的文章就介绍至此,更多相关oracle行级触发器内容请搜索硕编程以前的文章,希望以后支持硕编程!
相关文章