高手求救,触发器问题(ORA-04091:表 EXFLOW.PROC_INST 发生了变化,触发器/函数不能读)

beyondme 2004-11-27 03:00:50
我想在表PROC_INST中insert一条记录后,再更新字段PROC_INST.AUTH_NAME。
触发器如下,为行级触发:

begin
update PROC_INST set PROC_INST.AUTH_NAME = 'test' where PROC_INST.PROC_ID = :new.PROC_ID;
end;

触发器提示如下错误:
ORA-04091: 表 EXFLOW.PROC_INST 发生了变化,触发器/函数不能读
...全文
182 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
beyondme 2004-11-30
  • 打赏
  • 举报
回复
自己UP!
zhpsam109 2004-11-29
  • 打赏
  • 举报
回复
http://blog.csdn.net/zhpsam109/archive/2004/09/07/97335.aspx
beyondme 2004-11-29
  • 打赏
  • 举报
回复
问题又出现了,在同一个表中访问:new.ENTR_SEND就没问题,但是访问:new.ENTR_RECI就会出错。提示值已经被改变。

也就是下面的语句可以执行:
select user_name into username from exmainframe.SYS_USER where user_code = :new.ENTR_SEND;

而此语句会出错:
select user_name into username from exmainframe.SYS_USER where user_code = :new.ENTR_RECI;


触发器如下:

CREATE OR REPLACE TRIGGER "EXFLOW".
"TRG_RECI_ENTR_UPDATEUSERNAME" BEFORE INSERT
ON "RECI_ENTR"
FOR EACH ROW
declare username varchar2(50);
begin
select user_name into username from exmainframe.SYS_USER where user_code = :new.ENTR_SEND;
select username into :new.SEND_NAME from dual;

select user_name into username from exmainframe.SYS_USER where user_code = :new.ENTR_RECI;
select username into :new.RECI_NAME from dual;
end;
beyondme 2004-11-29
  • 打赏
  • 举报
回复
谢谢dinya2003(OK),问题已经解决。
jyk1970 2004-11-27
  • 打赏
  • 举报
回复
row level trigger中,不能包含该table自身的操作:select,insert,delete,update!!!
yujiabian 2004-11-27
  • 打赏
  • 举报
回复
ORA-04091 table string.string is mutating, trigger/function may not see it

Cause A trigger (or a user defined PL/SQL function that is referenced in this statement) attempted to look at (or modify) a table that was in the middle of being modified by the statement which fired it.
Action Rewrite the trigger (or function) so it does not read that table.
beyondme 2004-11-27
  • 打赏
  • 举报
回复
谢谢,不过还是提示出错:ORA-04084:无法更改此触发器类型的NEW值。
dinya2003 2004-11-27
  • 打赏
  • 举报
回复
proc_inst表执行insert行级触发的时候成了变异表,此时不能操作.
create or replace trigger trig_name
before insert proc_inst
for each row
begin
select 'test' into :new.auth_name from dual;
end ;
在本地自己的操作系统上,完全模拟生产环境,让学员跟着视频一步一步搭建一套在RHEL7操作系统上面的oracle19c的rac环境。同时学员还会学会DNS服务器,DNS客户端,NTP服务器,NTP客户端等操作系统知识。让学员在短时间内,oracle和操作系统知识,有一定的提升。让学员可以独自轻松安装一套oracle rac环境。一课程主题 模拟生产环境,用多路径共享存储,用虚拟软件安装一套RHEL7.5+oracle19c+rac+打补丁二课程特色 完成模拟生产环境,用openfiler软件模拟生产惠普的3par存储,用2个虚拟网卡模拟数据库服务器的2个HBA卡。课程以实践为主,从头到尾一步一步教学员怎样操作,实践性强模拟生产需求,完全可以把这套环境拿到生产环境安装三课程内容 1.课程结束成果演示    1.1 用workstation,安装一套rhel7+oracle19c+rac+multipath+共享存储+DNS服务器+DNS客户端+NTP服务器+NTP客户端的生产环境    1.2 怎样打oracle19c的rac补丁(包括GI补丁,oracle补丁,数据库补丁,OJVM补丁,bug补丁)2.安装openfiler软件,模拟共享存储+配置多路径访问    2.1安装openfiler软件   2.2配置openfiler软件(配置2个虚拟网卡,模拟服务器的2个HBA卡)   2.3创建ocr磁盘   2.4创建mgmt磁盘   2.5创建数据文件磁盘   2.6创建归档日志磁盘3.安装2台数据库服务器    3.1安装2台数据库服务器RHEL7.5   3.2配置服务器双网卡绑定+配置服务器心跳线4.安装多路径软件识别共享存储中的磁盘     4.1安装服务器本地yum源    4.2安装iscsi软件,配置多路径配置文件,识别共享存储中的磁盘    4.3识别ocr磁盘    4.4识别mgmt磁盘    4.5识别数据文件磁盘    4.6识别归档日志磁盘5.oracle19c的rac环境系统参数官方说明     5.1如何配置oracle19c的rac的系统参数(我们参考官方说明)    5.2oracle19c+rac环境Best Practices 官方说明文档6.安装oracle19c+rac之前的准备工作     6.1修改/etc/hosts文件    6.2配置DNS服务器+DNS客户端+NTP服务器+NTP客户端    6.3创建用户和组    6.4创建目录    6.5修改用户环境变量    6.6安装相关软件包    6.7配置ssh互信    6.9禁用服务器透明大页7.安装oracle+19c+rac软件    7.1安装GI软件   7.2创建ASM磁盘,主要是数据文件磁盘和归档日志磁盘   7.3安装数据库软件   7.4创建数据库实例   7.5日常常用维护集群命令(启停数据库,启停集群,查看监听,教同学们怎样不死记命令,而且命令还正确)8.打补丁   8.1打GI和ORACLE的操作系统补丁  8.2打OJVM补丁  8.3打ORA600的bug补丁9.课程总结和成果演示  9.1课程总结和成果演示 四学习必要工具 安装workstation软件  官网下载openfiler,rhel7.5软件下载oracle软件(包括19.3的rac安装包,19.4的补丁)以上软件我都已经在视频里面做了下载地址说明五课程纠错1)rac的私有ip应该是不同的网段,我在视频中设置错误。Ensure all private Ethernet interfaces are set to different subnets on each node. If different subnets are not used and connectivity is lost, this can cause a node reboot within the cluster2)配置好multipath,以及多路径的别名后,还要增加如下配置文件。[root@hellorac1 rules.d]# cat /etc/udev/rules.d/99-persistent.rulesENV==data, OWNER:=grid, GROUP:=asmadmin, MODE:=660上面的配置文件增加成功后,运行如下命令:#udevadm control --reload-rules#/sbin/udevadm trigger --type=devices --action=change执行完成之后,会发现/dev/dm*相应的磁盘权限变成grid.asmadmin. 视频中只运行了udevadm control --reload-rules。3)安装GI部分1和部分2,先看部分2,再看部分1.特此纠正上面的3个错误。谢谢大家的支持和厚爱。

17,078

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧