首页 >

ORA-04091:触发器/函数不能读

数据库|mysql教程ORA-04091:触发器/函数不能读
ORA-04091,Oracle错误代码,ORA-04091
数据库-mysql教程
html文章管理系统 源码,如何改变vscode终端,ubuntu 端口限速,tomcat没有项目名,爬虫+源码,php函数 减,名优seo优化业务前景,招聘网站html 源码,游戏源代码模板lzw
关于自治事务解决触发器导致ORA-04091:触发器/函数不能读它不可行的验证。
土巴兔官网源码,vscode缩进距离变短,ubuntu混乱邪恶,本机访问不到tomcat,sqlite3文件过大,信息爬虫网络信息爬虫,php 输出下载,广州seo项目怎么优化,海盗湾类似网站,joomla空白模板lzw
免费微信分销商城系统源码,vscode界面混乱,ubuntu存储池,tomcat做了什么,sqlite设置路径,jquery页面切换插件,拼图前端框架下载,爬虫 电商,php的<<<,seo怎么优化方案,贵金属手机网站模板,网页ps模板,dede 模板 判断语句,微信分享指定页面代码,网站crm管理系统模板下载,企业级小程序源码lzw

关于自治事务解决触发器导致”ORA-04091:触发器/函数不能读它”不可行的验证。

经常会有人提出这样的问题:“有一个这样的问题,有一个表A有 a,b,c,d四个字段,修改一条记录d的值为2的倍数,希望把该记录插入相同结构的表B中。并删除A表的这条记录。”

相关SQL:

–一张表

create table FOO
(
A NUMBER(10),
B NUMBER(10),
C NUMBER(10),
D NUMBER(10)
)
;

–基于这张表的触发器

CREATE OR REPLACE TRIGGER tri_foo
AFTER INSERT OR UPDATE ON foo
FOR EACH ROW
DECLARE
N_NUM NUMBER(5);
BEGIN
IF MOD(TRUNC(:NEW.D),2) =0 THEN
DELETE FROM FOO WHERE FOO.D = :NEW.D;
END IF;
END;

这个函数在执行的时候会报告这样的错误:“ORA-04091:表SCOTT.FOO 发生了变化,触发器/函数不能读它”。网上有很多关于该错误的解决方案,其中,,有很大一部分是增加PRAGMA AUTONOMOUS_TRANSACTION语句,设置该触发器为自治事务,然后避免该错误。增加之后确实不报错了,而且貌似可以执行了,但是事真的如此么?修改之后的触发器如下:

CREATE OR REPLACE TRIGGER tri_foo
AFTER INSERT OR UPDATE ON foo
FOR EACH ROW
DECLARE
PRAGMA AUTONOMOUS_TRANSACTION;
N_NUM NUMBER(5);
BEGIN
IF MOD(TRUNC(:NEW.D),2) =0 THEN
DELETE FROM FOO WHERE FOO.D = :NEW.D;
END IF;
COMMIT;
END;


ORA-04091:触发器/函数不能读
  • Oracle启动报错:ORA-00845: MEMORY_TARGET not supported on this sy
  • Oracle启动报错:ORA-00845: MEMORY_TARGET not supported on this sy | Oracle启动报错:ORA-00845: MEMORY_TARGET not supported on this sy ...

    ORA-04091:触发器/函数不能读
  • 关于“EXP-00056: ORACLE error 12154 encountered”的操作
  • 关于“EXP-00056: ORACLE error 12154 encountered”的操作 | 关于“EXP-00056: ORACLE error 12154 encountered”的操作 ...

    ORA-04091:触发器/函数不能读
  • ORA-02030解决办法
  • ORA-02030解决办法 | ORA-02030解决办法 ...