ORA-04091:表XX发生了变化,触发器/函数不能读它
异常原因:
在触发器的执行过程中出现了受事务影响的语句:
示例:
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发生了变化,触发器/函数不能读它相关推荐
- 发生了变化 触发器函数不能读它_2013年1月18日调试触发器“表发生了变化,触发器或函数不能读它”的出现原因,以及解决方案...
1.异常出现的场景. :在使用Hibernate做为项目持久层的情况下,需要对某一张表进行一个扩展,扩展操作便是在该表上创建一个触发器.将表中的数据读入到其他表中. SQL语句如下: drop tab ...
- 2013年1月18日调试触发器“表发生了变化,触发器或函数不能读它”的出现原因,以及解决方案...
1.异常出现的场景. :在使用Hibernate做为项目持久层的情况下,需要对某一张表进行一个扩展,扩展操作便是在该表上创建一个触发器.将表中的数据读入到其他表中. SQL语句如下: drop tab ...
- 加窗函数后频谱幅值发生了变化的修正技巧
在加窗函数前.后计算的频谱幅值发生了变化(矩形窗除外),这个变化是怎么发生的?该如何修正幅值呢?下面以汉宁窗函数为例进行说明. 一.矩形窗函数和汉宁窗函数的频谱 先来说明矩形窗函数的频谱.设离散的矩形 ...
- oracle创建主键sql语句,Oracle创建主键自增表(sql语句实现)及触发器应用
Oracle创建主键自增表(sql语句实现)及触发器应用 1.创建表 复制代码 代码如下: createtableTest_Increase( useridnumber(10)NOTNULLprima ...
- 警告:push.default未设置;它的隐含值在Git 2.0中发生了变化
本文翻译自:Warning: push.default is unset; its implicit value is changing in Git 2.0 I've been using Git ...
- python3 threading是否被抛弃_Python3中的线程模块是否发生了变化?如果是,怎么办?...
不管线程行为是否在python版本之间发生了变化,在没有使用锁的情况下,在多个非同步线程上递增num的行为充其量是不确定的.即使在同一台PC机上对同一个解释器进行多次运行,也可能产生不同的结果.因为您 ...
- oracle 一个表上的多个触发器的执行顺序
oracle 一个表上的多个触发器的执行顺序如下: before statement trigger->before row trigger->after row trigger-> ...
- 解决Oracle报错ORA-01653: 表xx无法通过 8192 (在表空间 xx_data 中) 扩展
向Oracle 11g数据库中批量插入数据,当插入近2亿条数据后,报出如下错误: ORA-01653: 表xx无法通过 8192 (在表空间 xx_data 中) 扩展. 查看表空间,发现表空间大小已 ...
- OpenAI chatGPT火爆出圈,世界悄悄发生着变化
OpenAI chatGPT火爆出圈,世界悄悄发生着变化 一.为什么突然火起来了? 二.ChatGPT功能示例 2.1 [AI聊天](https://chat.openai.com/chat) 2.2 ...
最新文章
- 会写代码的AI开源了!C语言写得比Codex还要好,掌握12种编程语言丨CMU
- 220V黄金光的LED灯带测试与结构
- ubuntu下wps无法使用搜狗输入法输入中文
- TopCoder入门教程
- Transaction 那点事儿,Spring事务管理
- 原型设计-结对第一次作业
- Python 自动化,Helium 凭什么取代 Selenium?
- notepad自动对齐html代码,notepad如何存储为html格式化
- redis 系列17 持久化 AOF
- 火狐浏览器走局域网中的代理ip
- mysql 部署在私有云_教你在 RHEL 7 中部署私有云网盘
- 极品五笔管理员能用,普通用户无法使用
- mysql数据库创建表时通过设置什么属性可以设置字段编号自动增加_Mysql数据库创建表样例和解释...
- 使用SQL Server发布数据库快照遇到错误:对路径”xxxxx“访问被拒绝的解决方法...
- 【Verilog 常见设计】(0)二进制码和格雷码互转 Verilog 实现
- 基于java的房地产客户管理系统
- jquery API参考手册
- OpenCms8.5 安装
- 增大或者减小图片大小的方法
- 相机计算坐标公式_相机位姿估计3:根据两幅图像的位姿估计结果求某点的世界坐标...