环境:

数据库:Oracle 12c;数据库A(本地),数据库B(远程),在A中创建DBLink连接到B

工具:sqldevloper

问题:

数据库A中的Change表中创建了触发器T,After insert,当T被触发时,查询I表和B表,并将查到的数据插入到数据库B中对应的表中,Change表中一条记录可对应0或多条I表中的数据,I表中的一条记录可对应0或多条B表中的数据,通过创建游标来实现,

简而言之,触发器被触发,先查询再向远程数据库插入数据。

会出现下面的错误:

java.sql.SQLException:ORA-00604:递归SQL级别1出现错误

​ ORA-02067:要求事务处理或保存点回退

原因:

?

解决方案:

?

触发器代码:create or replace

trigger plm_mapping_mid_trg

after insert on change

for each row

declare

-- 通用变量

trg_ato_number change.ato_number%type;

-- mfr游标

cursor vrows_mfr(trg_pid in item.pid%type) is select mfr_name trg_imak002

-- into trg_flag_mfr, trg_mfr_name

from mfr where pid = trg_pid;

-- item游标

cursor vrows_item(ato_number in change.ato_number%type) is select pid trg_pid, item_number trg_imat001, item_type trg_imat002, substr(item_number, 1, 2) trg_imat003, item_description trg_imat004,

unit trg_imat005, lifecycle_phase trg_imat007, business_unit trg_imat026

from jx_itf_item where ato_number = trg_ato_number;

-- BOM游标

cursor vrows_bom(trg_pid in item.pid%type) is select assembly_item trg_bmat001, component_item trg_bmat002, unit_consumption trg_bmat003

from jx_itf_bom where pid = trg_pid;

-- assembly游标

cursor vrows_assembly(trg_pid in item.pid%type) is select assembly_item

from jx_itf_bom_assembly_header where pid = trg_pid;

begin

trg_ato_number := :new.ato_number;

-- 根据ato_number查询item

for r_item in vrows_item(trg_ato_number) loop

-- 插入远程数据库的item表

insert into plm_imatuc_t@plm_mapping_mid_dblink(plm_pk, imat001, imat002, imat003,imat004,imat005,imat007, imat026)

values(r_item.trg_pid, r_item.trg_imat001, r_item.trg_imat002, r_item.trg_imat003,r_item.trg_imat004,r_item.trg_imat005,r_item.trg_imat007, r_item.trg_imat026);

-- 根据pid查询mgr表中的对应的信息

for r_mfr in vrows_mfr(r_item.trg_pid) loop

-- 插入远程数据库的mfr表

insert into plm_imakuc_t@plm_mapping_mid_dblink(plm_pk, imak001, imak002) values(r_item.trg_pid, r_item.trg_imat001, r_mfr.trg_imak002);

end loop;

-- 根据pid查询Assembly表中的对应的信息

for r_assembly in vrows_assembly(r_item.trg_pid) loop

-- 根据pid查询BOM表

for r_bom in vrows_bom(r_item.trg_pid) loop

-- 插入远程数据库的bom表

insert into plm_bmatuc_t@plm_mapping_mid_dblink(plm_pk, bmat001, bmat002, bmat003)

values(r_item.trg_pid, r_bom.trg_bmat001, r_bom.trg_bmat002, r_bom.trg_bmat003);

end loop;

end loop;

end loop;

end;

oracle数据库触发器怎么查询后插入,[求助][Oracle][ORA-00604][ORA-02067]触发器被触发时向远程数据库插入数据...相关推荐

  1. mysql和oracle中进行工资查询后修改

    mysql和oracle中进行工资查询后修改或删除 报错: You can't specify target table 'userroles' for update in FROM clause 解 ...

  2. 对数据库进行先查询后插入的解决方案

    场景: 多线程高频率请求插入某一条数据,要求这条数据不能被重复插入.应该如何做? 转载于:https://www.cnblogs.com/hy87/p/7282831.html

  3. Oracle数据库实验四查询实验三(Oracle 11g)

    实验要求: 1.在fruits表和suppliers表之间使用等值连接查询.(  s_id   ,s_name,f_name, f_price )   , 2.在fruits表和suppliers表之 ...

  4. oracle Group by 分组查询后,分页

    public Map getInWareHouseReport(int i, int j, InWareHouse inWareHouse) {         //查询分组后总条数          ...

  5. 电脑重装oracle提示,电脑重装系统后怎样恢复ORACLE?

    我的电脑突然挂了,不得不重装系统,不过我的ORACLE装在了D盘,所有的文件都还在,我相信一定能够恢复,直到搞定工作,我才开始整我的数据库,花了两天时间,终于恢复了,庆祝一下,同时总结一下,希望有遇到 ...

  6. oracle数据库怎么分组查询,oracle数据库之分组查询

    本章内容和大家分享的是数据当中的分组查询.分组查询复杂一点的是建立在多张表的查询的基础之上,(我们在上一节课的学习中已经给大家分享了多表查询的使用技巧,大家可以自行访问:多表查询1  多表查询2)而在 ...

  7. oracle 分组 排名,Oracle数据库之分组查询及排序

    分组查询:使用 group by 来设置分组,把该列具有相同值的多条记录当成一组记录来处理,然后只会输出一条记录,得到的结果会默认使用升序的方式进行排列. 规则: (1)如果使用了分组函数,或者是 g ...

  8. Oracle数据库Date类型查询问题(

    浅谈Oracle数据库Date类型查询问题 用过Oracle数据库的朋友应该知道,Oracle数据库在以Date类型为查询条件时存在一个小小的BUG,如: select * from tableNam ...

  9. 查看oracle数据库启动状态,Oracle数据库的状态查询

    1 状态查询 启动状态 SQL语句 结果 nomount select status from v$instance; STARTED select open_mode from v$database ...

最新文章

  1. 精通ASP.NET中弹出窗口技术
  2. UVA10534-----Wavio Sequence-----动态规划之LIS
  3. win8 app内存溢出检测工具PerfView.exe的使用
  4. 《C++ Primer plus》学习笔记之”RTTI”
  5. idea2021如何开启RunDashboard
  6. 腾讯开源首个医疗AI项目,业内首个3D医疗影像大数据预训
  7. VC6.0 DLL项目与WINDOWS项目的转换
  8. 序列化和反序列化的概念与延伸【详细解释 + 样例演示】
  9. swf批量转png_CAD批量打印(探索者易打软件)优势介绍
  10. java执行数学表达式_数学表达式解析-JAVA版
  11. 嵌入式操作系统内核原理和开发(信号量)
  12. 网页中加载flash的方法
  13. Selenium2+python自动化64-100(大结局)[已出书]
  14. RESTful学习笔记
  15. widows终端远程连接Linux服务器
  16. 利用ps制作油画风格的照片
  17. python牛顿法算立方根_牛顿迭代法求解立方根
  18. canvas实现图片旋转
  19. C/C++图形库EasyX快速上手指南【1】——绘图窗口和基本图形文字绘制
  20. IDEA使用手记——IDEA主菜单被隐藏了!!

热门文章

  1. 蓝桥杯软件类竞赛---手算题攻略
  2. android 播放3gp音频,说说 Android 中如何操作音频与视频文件
  3. Oracle表空间的查看方法
  4. RocketMQ常见问题-消息重复消费和消息重复的问题
  5. TI用2000万小时给出使用氮化镓的理由
  6. JAVA简单课程设计有文档和源代码
  7. wps云文档回收站在哪_获得自己的云并回收数据
  8. SLAM、SFM、MVG与MVS的区别和联系
  9. Microsoft SQL Server 2000 下载地址汇总
  10. 基于JSP+MySQL的网上购书商城