当前位置: 首页 > 面试题库 >

变异,触发器/函数可能看不到它-执行触发器时出错

吕灿
2023-03-14
问题内容
CREATE OR REPLACE TRIGGER UPDATE_TEST_280510
AFTER insert on TEST_TRNCOMPVISIT
declare
V_TRNCOMPNO NUMBER(10);

CURSOR C1 IS SELECT B.COMPNO FROM TEST_TRNCOMPVISIT A, TEST_TRNCOMPMST B, 
                                  TEST_MEMMAST C
WHERE A.COMPNO=B.COMPNO 
AND B.TRNMEMID=C.MEMID 
AND C.MEMOS>=1000;

begin
open c1;
fetch c1 into V_TRNCOMPNO;


UPDATE TEST_TRNCOMPMST SET COMPSTATUS='P',
       remark='comp is pending due to O/S>1000'
WHERE COMPNO=V_TRNCOMPNO AND COMPSTATUS='C';
CLOSE C1;

end;

我做了这个触发器,在将行插入表TEST_TRNCOMPVISIT时,出现以下错误-

发生以下错误:

ORA-04091:表TEST.TEST_TRNCOMPVISIT正在变异,触发器/函数可能看不到它
ORA-06512:在“ TEST.UPDATE_TEST_280510”,第4行
ORA-06512:在“ TEST.UPDATE_TEST_280510”,第10行
ORA-04088:在执行期间出错执行触发器“ TEST.UPDATE_TEST_280510”


问题答案:

这是您唯一的触发器吗?您的触发器更新表TEST_TRNCOMPMST。如果此表上有一个访问TEST_TRNCOMPVISIT的触发器,则会收到错误消息。



 类似资料:
  • 问题内容: 我最近开始处理大型复杂的应用程序,由于这个错误,我刚刚被分配了一个错误: 有问题的触发器看起来像 该表具有主键“ ”,“约会事件ID” 和另一列“ ”,该列可能包含也可能不包含另一行的。 这似乎触发正试图确保以相同的其他人也 提到了同样一个该行指的是 一个转诊到另一行,如果这个人是指到另一行。 DBA对错误报告的评论是“删除触发器,然后执行代码中的检查”,但不幸的是,他们在Hibern

  • 本文向大家介绍Oracle触发器表发生了变化 触发器不能读它的解决方法(必看),包括了Oracle触发器表发生了变化 触发器不能读它的解决方法(必看)的使用技巧和注意事项,需要的朋友参考一下 出现原因,是因为在更新的的表和读取的表是同一个表。 出现错误时,是因为触发器在T_userupdateT在T_user上,触发器内部有读取了T_user所以有错误。 修改如下 多了PRAGMA AUTONOM

  • 如果你使用blob存储触发器阅读Azure WebJobs上的留档,它们会提到这不是很可靠: WebJobs SDK扫描日志文件以查看新的或更改的blob。这个过程不是实时的;在创建blob后的几分钟或更长时间内,函数可能不会被触发。此外,存储日志是在“尽力而为”的基础上创建的;无法保证所有事件都将被捕获。在某些情况下,日志可能会丢失。如果您的应用程序无法接受blob触发器的速度和可靠性限制,建议

  • 我想用quartz scheduler使用jdbc数据存储立即执行作业~。然而,即使我使用now()或调用triggerjob进行调度,在调度和触发器fire之间也有20-30秒的延迟。 我尝试用一个简单的触发器执行作业: 并且我还尝试用调度程序触发: 下面是显示延迟的侦听器日志。

  • 我创建了触发器:--drop trigger t_update_orders_gross

  • 主要内容:SHOW TRIGGERS语句查看触发器信息,在triggers表中查看触发器信息查看触发器是指查看数据库中已经存在的触发器的定义、状态和语法信息等。MySQL 中查看触发器的方法包括 SHOW TRIGGERS 语句和查询 information_schema 数据库下的 triggers 数据表等。本节将详细介绍这两种查看触发器的方法。 SHOW TRIGGERS语句查看触发器信息 在 MySQL 中,可以通过 SHOW TRIGGERS 语句来查看触发器的基本信息,语法格