系统城装机大师 - 固镇县祥瑞电脑科技销售部宣传站!

当前位置:首页 > 数据库 > oracle > 详细页面

Oracle行级触发器的使用操作

时间:2023-10-31来源:系统城装机大师作者:佚名

Oracle行级触发器的使用

1、创建触发器并使用dblink在插入时进行数据同步

异库异表同步

1
2
3
4
5
6
7
8
9
10
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;

同库异表同步

1
2
3
4
5
6
7
8
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数据库的系统结构

    1.Oracle数据库系统结构概述 2.Oracle数据库存储结构 物理存储结构 控制文件 数据文件 重做日志文件 归档日志文件 Oracle数据库逻辑结构 数据块(Data Block) (盘)区(Extent) 段(Segment) 表空间(Tablespace) 本地管...

    2023-10-31

  • Oracle19c最新版保姆级别最详细的安装配置教程

    windows下的Oracle19c 一、官网下载Oracle19c数据库 二、安装Oracle数据库 1.解压安装包 2.运行setup.exe安装 三、配置 四、安装完Oracle数据库,给scott用户解锁 1.解决Oracle数据库中没有scott账户的问题 2.给scott...

    2023-10-31

系统教程栏目

栏目热门教程

人气教程排行

站长推荐

热门系统下载