原文: 劉武 | ora-04091 表XX發(fā)生了變化 觸發(fā)器/函數(shù)不能讀 的錯(cuò)誤處理? ?
開(kāi)發(fā)過(guò)程中碰到了 ora-04091 錯(cuò)誤:表XX發(fā)生了錯(cuò)誤,觸發(fā)器/函數(shù)不能讀
以下是模擬場(chǎng)景:
表PRODUCTS:
CREATE TABLE CKSP.PRODUCTS
(
ID NUMBER(1) NOT NULL ,
NAME VARCHAR 2(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
并聲明觸發(fā)器TRG_PRODUCTS_INSERT:
CREATE OR REPLACE TRIGGER TRG_PRODUCTS_INSERTBEFORE 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 ;
若執(zhí)行以下SQL則會(huì)引發(fā)ORA-04091錯(cuò)誤
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 varchar 2(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 .... 語(yǔ)句,而應(yīng)使用變量來(lái)保存值
這也許只是眾多情形之一,僅供參考.
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號(hào)聯(lián)系: 360901061
您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對(duì)您有幫助就好】元
