异常原因:

在触发器的执行过程中出现了受事务影响的语句:

示例:

CREATE OR REPLACE TRIGGER "TIB_PROJ_COMP_TREE"BEFORE INSERT ON PROJ_COMP_TREEFOR EACH ROW
DECLAREPRAGMA AUTONOMOUS_TRANSACTION;--没有这句话就会触发异常MAX_LINE_NO NUMBER;
BEGINIF :NEW.PC_LEVEL > 0 AND :NEW.DEF_USR_ID IS NOT NULL THENSELECT (NVL(MAX(CODE), 0) + 1)--这句话受到事务影响INTO MAX_LINE_NOFROM PROJ_COMP_TREEWHERE PROJ_COMP_NO = :NEW.PROJ_COMP_NOAND LEAF = :NEW.LEAFAND P_PC_SEQ = :NEW.P_PC_SEQ;:NEW.CODE := MAX_LINE_NO;IF :NEW.P_PC_SEQ = '0' THENIF :NEW.LEAF = '1' THEN:NEW.PC_SEQ := LPAD(MAX_LINE_NO, 4, '0');ELSE:NEW.PC_SEQ := LPAD(MAX_LINE_NO, 2, '0');END IF;ELSEIF :NEW.LEAF = '1' THEN:NEW.PC_SEQ := :NEW.P_PC_SEQ || LPAD(MAX_LINE_NO, 4, '0');ELSE:NEW.PC_SEQ := :NEW.P_PC_SEQ || LPAD(MAX_LINE_NO, 2, '0');END IF;END IF;END IF;
END;

类似的,当触发器中出现Insert,Update等SQL语句,也会触发此异常;

解决方法,需要在Declare中声明使用自治事务;

...
DECLARE--声明使用自治事务PRAGMA AUTONOMOUS_TRANSACTION;
...

此时,触发器不会出现异常,但是真正的效果可能会和想要达到的目标效果不一致;

具体情况还是要具体分析;

ORA-04091:表XX发生了变化,触发器/函数不能读它相关推荐

  1. 发生了变化 触发器函数不能读它_2013年1月18日调试触发器“表发生了变化,触发器或函数不能读它”的出现原因,以及解决方案...

    1.异常出现的场景. :在使用Hibernate做为项目持久层的情况下,需要对某一张表进行一个扩展,扩展操作便是在该表上创建一个触发器.将表中的数据读入到其他表中. SQL语句如下: drop tab ...

  2. 2013年1月18日调试触发器“表发生了变化,触发器或函数不能读它”的出现原因,以及解决方案...

    1.异常出现的场景. :在使用Hibernate做为项目持久层的情况下,需要对某一张表进行一个扩展,扩展操作便是在该表上创建一个触发器.将表中的数据读入到其他表中. SQL语句如下: drop tab ...

  3. 加窗函数后频谱幅值发生了变化的修正技巧

    在加窗函数前.后计算的频谱幅值发生了变化(矩形窗除外),这个变化是怎么发生的?该如何修正幅值呢?下面以汉宁窗函数为例进行说明. 一.矩形窗函数和汉宁窗函数的频谱 先来说明矩形窗函数的频谱.设离散的矩形 ...

  4. oracle创建主键sql语句,Oracle创建主键自增表(sql语句实现)及触发器应用

    Oracle创建主键自增表(sql语句实现)及触发器应用 1.创建表 复制代码 代码如下: createtableTest_Increase( useridnumber(10)NOTNULLprima ...

  5. 警告:push.default未设置;它的隐含值在Git 2.0中发生了变化

    本文翻译自:Warning: push.default is unset; its implicit value is changing in Git 2.0 I've been using Git ...

  6. python3 threading是否被抛弃_Python3中的线程模块是否发生了变化?如果是,怎么办?...

    不管线程行为是否在python版本之间发生了变化,在没有使用锁的情况下,在多个非同步线程上递增num的行为充其量是不确定的.即使在同一台PC机上对同一个解释器进行多次运行,也可能产生不同的结果.因为您 ...

  7. oracle 一个表上的多个触发器的执行顺序

    oracle 一个表上的多个触发器的执行顺序如下: before statement trigger->before row trigger->after row trigger-> ...

  8. 解决Oracle报错ORA-01653: 表xx无法通过 8192 (在表空间 xx_data 中) 扩展

    向Oracle 11g数据库中批量插入数据,当插入近2亿条数据后,报出如下错误: ORA-01653: 表xx无法通过 8192 (在表空间 xx_data 中) 扩展. 查看表空间,发现表空间大小已 ...

  9. OpenAI chatGPT火爆出圈,世界悄悄发生着变化

    OpenAI chatGPT火爆出圈,世界悄悄发生着变化 一.为什么突然火起来了? 二.ChatGPT功能示例 2.1 [AI聊天](https://chat.openai.com/chat) 2.2 ...

最新文章

  1. 会写代码的AI开源了!C语言写得比Codex还要好,掌握12种编程语言丨CMU
  2. 220V黄金光的LED灯带测试与结构
  3. ubuntu下wps无法使用搜狗输入法输入中文
  4. TopCoder入门教程
  5. Transaction 那点事儿,Spring事务管理
  6. 原型设计-结对第一次作业
  7. Python 自动化,Helium 凭什么取代 Selenium?
  8. notepad自动对齐html代码,notepad如何存储为html格式化
  9. redis 系列17 持久化 AOF
  10. 火狐浏览器走局域网中的代理ip
  11. mysql 部署在私有云_教你在 RHEL 7 中部署私有云网盘
  12. 极品五笔管理员能用,普通用户无法使用
  13. mysql数据库创建表时通过设置什么属性可以设置字段编号自动增加_Mysql数据库创建表样例和解释...
  14. 使用SQL Server发布数据库快照遇到错误:对路径”xxxxx“访问被拒绝的解决方法...
  15. 【Verilog 常见设计】(0)二进制码和格雷码互转 Verilog 实现
  16. 基于java的房地产客户管理系统
  17. jquery API参考手册
  18. OpenCms8.5 安装
  19. 增大或者减小图片大小的方法
  20. 相机计算坐标公式_相机位姿估计3:根据两幅图像的位姿估计结果求某点的世界坐标...

热门文章

  1. c# 局域网传输工具
  2. 速卖通平台交易佣金和运费能否开具发票呢?具体操作流程如下
  3. 如何理解面向对象(什么是面向对象?)
  4. Loj#6223 Luogu P4009 汽车加油行驶 分层图最短路
  5. 005_redis_set集合
  6. 【转】C# 对sqlite基本操作,带批量插入
  7. 信息与通信的数学基础——Laplace变换
  8. 穷人翻身的商机,会造就一批富翁!网友:机会来了
  9. 消息中间件架构面面观
  10. Vue3组件化开发(二)