ora-04091 表XX发生了变化 触发器/函数不能读 的错误处理
2009-09-28 20:25
363 查看
原文:刘武|ora-04091 表XX发生了变化 触发器/函数不能读 的错误处理 开发过程中碰到了ora-04091错误:表XX发生了错误,触发器/函数不能读以下是模拟场景:表PRODUCTS:
CREATE TABLE CKSP.PRODUCTS
(
ID NUMBER(1) NOT NULL,
NAME VARCHAR2(100) NOT NULL,
PRICE1 NUMBER(1) NOT NULL,
PRICE2 NUMBER(1) NOT NULL
)
TABLESPACE USERS
NOLOGGING
PCTFREE 10
PCTUSED 0
INITRANS 1
MAXTRANS 255
STORAGE(BUFFER_POOL DEFAULT)
NOPARALLEL
NOCACHE并声明触发器TRG_PRODUCTS_INSERT:
CREATE OR REPLACE TRIGGER TRG_PRODUCTS_INSERT
BEFORE INSERT
ON PRODUCTS
REFERENCING OLD AS OLD NEW AS NEW
FOR EACH ROW
declare
varCount number;
begin
select count(id) into varCount from products where name = :new.name;
if varCount > 0 then
varCount:= varCount +1;
:new.name :=varCount||'_'||:new.name;
end if;
end;若执行以下SQL则会引发ORA-04091错误
begin
insert into products values(1,'p1',1,2);
insert into products
select 2 as id ,name ,price1,price2 from products where id= 1;
end;解决方法:修改SQL 如下
declare
varName varchar2(100);
varPrice1 number;
varPrice2 number;
begin
insert into products values(1,'p1',1,2);
select name,price1,price2 into varName,varPrice1,varPrice2 from products where id =1;
insert into products values(2,varName,varprice1,varPrice2);
end;在此情形中不能使用INSERT INTO XXX SELECT .... 语句,而应使用变量来保存值这也许只是众多情形之一,仅供参考.
相关文章推荐
- ORA-04091:表XX发生了变化,触发器/函数不能读它
- ORA-04091:表XX发生了变化,触发器/函数不能读它
- 行级触发器对当前表操作,”ORA-04091: 表 XX 发生了变化, 触发器/函数不能读它“,解决方法
- ora 04091:表XX发生了变化,触发器/函数不能读它(lin49940)
- oracle 触发器update 出现ORA-04091: 表 **发生了变化, 触发器/函数不能读它
- ora-04091 表发生了变化,触发器函数不能读它
- 关于oracle中触发器触发时,报“表发生了变化,触发器或函数不能读它”错误
- 解决触发器检测到活动的独立的事务处理, 已经回退、表发生了变化, 触发器/函数不能读它
- 写oracle行级触发器时,不能操作本表,报"表 *** 发生了变化,触发器/函数不能读"的错误的解决办法
- oracle 临时表 解决 "表 *** 发生了变化,触发器/函数不能读"的问题
- 2013年1月18日调试触发器“表发生了变化,触发器或函数不能读它”的出现原因,以及解决方案
- oracle 临时表 解决 "表 *** 发生了变化,触发器/函数不能读"的问题
- oracle--ORA:04091:触发器/函数不能读它
- 表xxx发生了变化,触发器/函数不能读它
- [学习笔记]ORA-04091 触发器/函数不能读它 的解决
- oracle 临时表 解决 "表 *** 发生了变化,触发器/函数不能读"的问题
- 关于自治事务解决触发器导致"ORA-04091:触发器/函数不能读它"不可行的验证
- ORA-04091:表发生了变化触发器/函…
- Oracle中针对一张表建立触发器,并且触发器也处理同一张表的数据(ora-04091 错误)
- Oracle中针对一张表建立触发器,并且触发器也处理同一张表的数据(ora-04091 错误)