首页 > 数据库 >Oracle行级触发器的使用

Oracle行级触发器的使用

时间:2023-05-10 16:35:38浏览次数:42  
标签:语句 行级 触发器 -- DML 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触发器是自定义事务处理。

标签:语句,行级,触发器,--,DML,Oracle
From: https://www.cnblogs.com/jijm123/p/17388349.html

相关文章

  • RS触发器竞争现象
    S=R=1时,Q=非Q=0。如果此刻S,R突然变化=0,因为变0的过程有先有后,假设S先变为0,即有S=0,Q=0,得到输出非Q=1。如果是R先变成0,有R=0,非Q=0,即输出Q=1。Q的状态不稳定,Q的状态取决于谁先变为0...所以这是不允许出现的情况,因为你并不知道你的Q是什么状态。情况1:R=0和S=0在第一种情况下,两个......
  • Oracle误删除数据的恢复方法 分为两种方法:SCN和时间戳两种方法恢复。获得当前数据库的
    Oracle误删除数据的恢复方法分为两种方法:SCN和时间戳两种方法恢复。原文链接:http://www.taodudu.cc/news/show-202061.html Oracle误删数据的恢复,分为两种方法:SCN和时间戳两种方法恢复。一、通过SCN恢复删除且已提交的数据 1、获得当前数据库的SCN号selectcurrent_scn......
  • Oracle TO_CHAR(待格式化数据, 'FM99999990.00')
    作用:对数据进行格式化①其9代表:如果存在数字则显示数字,不存在则显示空格②其0代表:如果存在数字则显示数字,不存在则显示0,即占位符。③其FM代表:删除如果是因9带来的空格,则删除之......
  • PG系、Oracle、MySQL数据库在特定场景下结果差异分析
    PG系、Oracle、MySQL数据库在特定场景下结果差异分析作者:余从佳更新时间:2022-07-0110:52人气值:416 本文主要介绍以PolarDBO引擎、ADBPG为代表的PG系数据库在某种特定事务场景下,其事务结果与Oracle、MySQL不同的现象,并分析该现象出现的原因。一、数据初始化 Cr......
  • Quartz.Net间隔N周/日/年定时触发器写法总结
    由于近日在定时器中对特殊的规则(既不能通过表达式直接体现的)的用法初步汇总:本次使用的Quartz.Net的版本号:2.61.触发器测试验证publicclassTestQuartz{///<summary>///间隔N周定时触发器写法测试///</summary>publicstatic......
  • jdbc连接Oracle
    publicstaticvoidmain(String[]args){//声明连接对象、执行sql对象、结果集对象Connectionconn=null;PreparedStatementpre=null;ResultSetresults=null;//添加jar驱动try{//注册驱动Cla......
  • oracle异常处理
    序言最近在工作中遇到这么一个场景:在同一网段内存在着A库和B库,需要将A库下某些表的数据同步到B库B库跑着定时任务,定时调用存储过程将A库下的数据同步到B库。B库和A库是通过建立dblink建立连接的。【关于dblink相关可能会后面单独写博客,先给自己挖个坑,慢慢填哈哈】。定时任......
  • oracle 行转列 使用PIVOT关键字
    select*from(SELECTSTOP_ID,POSITION,INSTANT,SET_VALUEfromtable1)pivot( min(INSTANT)I,min(SET_VALUE)VFORPOSITIONIN( 1ASHT1, 2ASHT2, 3ASHT3, 4ASHT4, 5ASHT5, 6AS HT1, 7AS HT2 ......
  • 工作中,Oracle常用函数
    目录1、序言2、Oracle函数分类3、数值型函数3.1求绝对值函数3.2求余函数3.3判断数值正负函数3.4三角函数3.5返回以指定数值为准整数的函数3.6指数、对数函数3.7四舍五入函数4字符型函数4.1ASSCII与字符转换函数4.2获取字符串长度4.3字符串截取函数4.4字符串连接函数4.......
  • 【Oracle】使用xmlagg(xmlparse(content()).getclobval()拼接信息
    使用xmlagg(xmlparse(content()).getclobval()拼接信息简单来说格式如下xmlagg(xmlparse(content(内容||分割符)).getclobval()内容就是使用显示的数据部分,分隔符不同效果不同,分隔符可以使用chr()函数无分隔符xmlagg(xmlparse(content('这是一个字段:'||v.supercode||'、......