`

ORA-04091 表发生了变化,触发器/函数不能读

SQL 
阅读更多

问题描述:在函数中查询某张表前对表做了更新和插入操作,使表数据发生了变化,而函数返回的数据已经发生变化,导致出错.

 

如果在触发器中调用了存储过程,并且在触发器中对表A进行了更新,然后又在存储过程中对表A进行了插入,如此操作就会导致该问题的产生。

 

解决方案:尽量调整操作的方法,一步到位,不要做两个更新操作。

解决办法:在函数BEGIN之前加入一个自治事务pragma autonomous_transaction;

并且在END之前提交commit;

就OK了...

其中PRAGMA关键字通知PL/SQL编译器,将声明它的这个PL/SQL代码块分割为一个自治的或独立的事务.

例如:
function fun_Getxx(i_input varType)

return varType is Result varType;

pragma autonomous_transaction;

begin

        ……

        ……
        return Result;

       commit;

end;

分享到:
评论

相关推荐

    Oracle触发器表发生了变化 触发器不能读它的解决方法(必看)

    出现原因,是因为在更新的的表和读取的表是同一个表。 CREATE or replace TRIGGER T_userupdateT BEFORE update ON T_user REFERENCING OLD AS old NEW AS N_ROW FOR EACH ROW DECLARE U_xtfidemp1 varchar(36); u...

    Oraclet中的触发器

    触发器名与过程名和包的名字不一样,它是单独的名字空间,因而触发器名可以和表或过程有相同的名字,但在一个模式中触发器名不能相同。 触发器的限制 CREATE TRIGGER语句文本的字符长度不能超过32KB; 触发器...

    DatabaseTeam16

    创建触发器、过程和函数后的某些功能不起作用,例如添加新客户或出售份额 11/13/2014 - 调试说明 测试插入及其各自的错误输出。 代码:INSERT INTO customer values('eliz', 'Elizabeth', ' ', '1st street', 'pwd'...

    oracle实验报告及答案

    oracle的简单操作,以及创建触发器,构建函数等等

    Oracle SQL Hand-Oracle工具 v5.1.zip

    (6) 方便操作常用数据字典如表、视图、索引、过程、函数、触发器等(能显示和编辑编译PL/SQL代码); (7) 中英文双语界面并能随时切换,个性化界面设置,界面简洁清爽; (8) 运行语句“DESC tableName”清晰地显示表...

    oracle实验报告

    在命令的where子句中给出1=2,表示条件不可能成立,因而只能复制表结构,而不能复制任何数据到新表中去。另外,还可以复制一个表的部分列定义或部分列定义及其数据。 三、 Oracle数据库数据查询 1、单表查询 2、多...

    oracle详解

    ·有一些对象,如物化视图,基于函数的索引等不能被传输 可以用以下的方法来检测一个表空间或一套表空间是否符合传输标准: exec sys.dbms_tts.transport_set_check(‘tablespace_name’,true); select * from sys....

    Oracle 10g 学习笔记

    │ 安装Oracle后myEclipse不能正常使用.txt │ 手工配置listener.ora【避免出现ORA-12514错误】.txt │ 贴子树状态存储结构.jpg │ 贴子树状态存储结构.sql │ ├─01 Oracle入门 │ 01 Oracle 简介.txt │ 02 ...

    Oracle 9i&10g编程艺术:深入数据库体系结构(全本)含脚本

    9.5.4 为什么不能分配一个新日志? 310 9.5.5 块清除 312 9.5.6 日志竞争 315 9.5.7 临时表和redo/undo 317 9.6 分析undo 321 9.6.1 什么操作会生成最多和最少的undo? 321 9.6.2 ORA-01555: snapshot too old...

    Oracle 10g 开发与管理

    4.参数文件 (.ora) 16 二. 逻辑存储结构 17 1.数据块 (Data Blocks) 17 2.盘区(Extent) 18 3.段 (Segment) 18 4.表空间(Table Spaces) P34 18 三. 内存结构 19 1.数据缓冲区: 内存的40% 19 2.日志缓冲...

    oracle资料

    包含Oracle 函数,Oracle 优化,Oralce连接管理器,Ora 10G 错误代码,Oracle 触发器语法及实例,ORACLE的执行计划等..

    Toad 使用快速入门

    运行时可以根据需要输入参数,观察相关参数的变化来检查存储过程的正确性。在调式过程中,Toad 可以通过窗口显示所有的断点、参数, 调用堆栈和输出参数。使用Toad,非常容易检测到存储过程的错误,开发人员可以一步...

    oracle数据库dba管理手册

    1.4.13 函数 10 1.4.14 软件包 11 1.4.15 触发器 11 1.4.16 同义词 12 1.4.17 权限及角色 12 1.4.18 数据库链接 13 1.4.19 段、盘区和块 14 1.4.20 回滚段 14 1.4.21 快照和显形图 14 1.5 内部存储结构 15 1.5.1 ...

    ORACLE9i_优化设计与系统调整

    §3.2.7 不能在参数文件中指定的参数 70 §3.2.8 当参数指定错误时怎么办? 70 §3.3 参数内容说明 70 §3.4 DBA常用参数说明 71 §3.4.1 跟踪文件路径(BACKGROUND_DUMP_DEST) 71 §3.4.2 在缓冲区驻留对象...

    Oracle从入门到精通

    1.6、单行函数............................................. 1、character字符类型函数: ............................... 2、number数字类型函数..................................... 3、时间类型函数:(date...

    Oracle编程艺术

    1.3 开发数据库应用的正确(和不正确)方法.......................................... 70 1.3.1 了解Oracle体系结构............................................................ 70 1.3.2 理解并发控制...........

Global site tag (gtag.js) - Google Analytics