`

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...

    Oracle 授权 ORA-00990: 权限缺失或无效

    这个错误通常发生在试图访问、修改或者管理数据库对象(如表、视图、索引等)时。在本篇文章中,我们将深入探讨这个问题的原因、解决方案以及如何正确地授权和管理Oracle数据库的权限。 1. **错误原因**: - 用户...

    plsql不能连接linux下oracle问题ORA-12514.doc

    PL/SQL作为Oracle的过程语言,能够在Oracle数据库中执行存储过程、函数和触发器等。然而,在Linux环境下,PL/SQL可能无法连接到Oracle数据库,出现ORA-12514错误。本文档旨在解决这个问题,提供了详细的解决方案。 ...

    oracle错误一览表

    4. **表和列的访问权限**:ORA-00942(表或视图不存在)和ORA-01031(权限不足)等错误表明用户可能没有足够的权限来执行特定操作,如查询、插入或更新数据。 5. **存储问题**:包括表空间满(ORA-01652:无法扩展...

    SHOUG文档分享-ORACLE-TTS迁移后ORA3113错误处理-SHOUG成员左翼

    迁移过程中,可能会因为数据格式、存储结构的差异以及软件层面的不兼容,导致各种预料之外的错误,其中就包括了本案例中提及的ORA3113错误。 案例中指出,此错误发生在迁移完成后的一次查询操作中。Oracle数据库的...

    Oraclet中的触发器

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

    Oracle基于系统级触发器的审计功能

    ### Oracle基于系统级触发器的审计功能 #### 引言 在现代企业的信息化管理中,数据库的安全性至关重要。为了确保数据安全与合规性,数据库管理系统(DBMS)提供了多种审计手段,其中一种重要的机制就是利用系统级...

    oracle高级语法(事物、函数、存储过程、触发器、异常)[参照].pdf

    触发器是 Oracle 数据库中的一种程序单元,触发器可以在特定的事件发生时自动执行。触发器可以用于实现数据的一致性和完整性,例如自动更新数据、自动发送邮件等。 触发器可以包含多个语句,例如插入、更新、删除等...

    oracle触发器调用存储过程

    触发器调用存储过程的过程中可能会出现的问题是,insert语句不是自动提交的,因此当insert语句没有提交时,update语句可能会报“表/视图发生了变化,程序不能读它”的错误。这个问题可以通过使用Oracle自治事务来...

    oracle常用函数和常见错误积累

    2. **ORA-01400:不能插入NULL到非NULL列**:这表示尝试插入的行包含NULL值,而目标列不允许NULL。确保提供所有必要值,或者调整表结构允许NULL值。 3. **ORA-00920:无效的谓词**:可能是因为使用了错误的比较...

    PL/SQL 基本知识

    此外,PL/SQL还支持块的概念,如匿名块,这使得在不创建独立的存储过程或函数的情况下,也能进行临时性的数据库操作。匿名块的语法结构如下: ```sql DECLARE -- 声明部分 BEGIN -- 执行部分 EXCEPTION -- 异常...

    oracle ORA-00988 missing or invalid password 错误

    但这种变化并不意味着所有版本都支持,因此了解并遵循当前使用的Oracle版本的安全策略至关重要。 在日常的数据库管理中,除了密码规则外,还有很多其他方面需要注意。例如,密码复杂性要求、密码过期策略、锁定账户...

    instantclient-basic-nt-11.2.0.3.0.zip

    3. **开发和调试PL/SQL代码**:使用PL/SQL Developer的内置编辑器、调试器和代码完成功能,可以方便地编写和调试PL/SQL存储过程、函数和触发器。 4. **性能监控**:虽然Oracle Instant Client本身并不提供复杂的...

    \"Oracle 存储过程\"简单总结

    此外,存储过程还可以与触发器、函数、包、索引、视图等数据库对象结合使用,构建复杂的数据库应用系统。通过熟练掌握Oracle存储过程,开发者可以更高效地管理数据,提升系统的稳定性和性能。 在实际开发中,了解...

    oracle脚本 常用的数据库sql及pl\sql语言

    4. 使用存储过程和触发器提高数据库操作的效率和安全性。 总结,Oracle SQL和PL/SQL是Oracle数据库管理员和开发人员的核心技能。熟练掌握这些语言和特性,可以有效地管理数据库,构建高效稳定的应用程序。通过持续...

    Oracle 错误码大全 ERROR CODE LIST

    例如,错误码ORA-00922表示“缺少或无效的选项”,这通常发生在尝试创建表或修改表结构时使用了不被支持的选项。 3. **错误日志**:Oracle通过alert.log文件记录数据库运行时的错误信息,这对于排查问题非常有用。...

    ora2pg-18.2.zip_oracle

    2. **扫描**:ora2pg会扫描Oracle数据库的模式,识别表、视图、索引、触发器、存储过程等元素。 3. **分析**:根据扫描结果,ora2pg会分析每个对象,确定如何在PostgreSQL中适当地映射它们。 4. **转换**:ora2pg将...

    Java Functions, Stored Procedures, Triggers

    当遇到像"ORA-29549: class SCOTT.HelloWorld has changed, Java session state cleared"这样的错误时,可能是因为Java类发生了变化。这时,需要再次调用`dbms_java.set_output(10000)`来清理Java会话状态并重新...

    DatabaseTeam16

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

Global site tag (gtag.js) - Google Analytics