ORA-04091 觸發器/函式不能讀
報錯如下:
SQL> update GPPAYMENTFUND set attribute5='1' where fundapplyno ='20120314500102010001';
update GPPAYMENTFUND set attribute5='1' where fundapplyno ='20120314500102010001'
ORA-04091: 表 ACDEP.GPPAYMENTFUND 發生了變化,觸發器/函式不能讀
ORA-06512: 在"ACDEP.CLM_WEB_MAIN", line 4
ORA-04088: 觸發器 'ACDEP.CLM_WEB_MAIN' 執行過程中出錯
觸發器如下:
CREATE OR REPLACE TRIGGER CLM_WEB_MAIN
before UPDATE
OF ATTRIBUTE5
ON ACDEP.GPPAYMENTFUND
REFERENCING NEW AS NEW OLD AS OLD
FOR EACH ROW
DECLARE v_id NUMBER;v_row_id VARCHAR2(30);v_change_type CHAR(1);
BEGIN
IF UPDATING THEN
SELECT B.C_EDR_NO INTO v_row_id FROM acdep.GPPAYMENTFUND A,acdep.T_FIN_CAVDOC B
WHERE A.FUNDAPPLYNO=B.C_CAV_NO AND A.FUNDAPPLYNO=:NEW.FUNDAPPLYNO AND SUBSTR(B.C_EDR_NO,0,2)='03';
IF(SUBSTR(v_row_id,0,4)='0330') THEN
UPDATE SET T_JQ_PAY_TM=TO_DATE (:NEW.ATTRIBUTE5,'yyyy-mm-dd hh24:mi:ss')
WHERE T_CLAIM_NO=v_row_id and T_JQ_PAY_TM is null;
ELSIF(SUBSTR(v_row_id,0,4)='0332') THEN
UPDATE SET T_SY_PAY_TM=TO_DATE (:NEW.ATTRIBUTE5,'yyyy-mm-dd hh24:mi:ss')
WHERE B_CLAIM_NO=v_row_id and T_SY_PAY_TM is null;
END IF;
END IF;
END;
ORA-04091: "table %s.%s is mutating, trigger/function may not see it"
Cause: A trigger (or a user defined plsql 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.
if your trigger contains a select statement or an update statement referencing the table it is triggering off of you will receive the error.
這裡應該是
SELECT B.C_EDR_NO INTO v_row_id FROM acdep.GPPAYMENTFUND A,acdep.T_FIN_CAVDOC B
WHERE A.FUNDAPPLYNO=B.C_CAV_NO AND A.FUNDAPPLYNO=:NEW.FUNDAPPLYNO AND SUBSTR(B.C_EDR_NO,0,2)='03';
不允許GPPAYMENTFUND 進行SELECT 因為它是觸發器表
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/7728585/viewspace-718992/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- oracle 臨時表 解決 "表 *** 發生了變化,觸發器/函式不能讀"的問題Oracle觸發器函式
- Oracle 表 XXXXX 發生了變化, 觸發器/函式不能讀它.Oracle觸發器函式
- [原創] 有關觸發器 ORA-04091解決方法觸發器
- 七、函式-儲存過程-觸發器函式儲存過程觸發器
- 觸發器中不能commit觸發器MIT
- 破解儲存過程,函式,檢視,觸發器解密儲存過程函式觸發器解密
- PostgreSQL LIST分割槽實現:繼承表+函式+觸發器。SQL繼承函式觸發器
- 頭歌資料庫實驗七:函式與觸發器資料庫函式觸發器
- withoutEvents函式裡面的事件被觸發函式事件
- js程式碼觸發事件 函式列表JS事件函式
- 【MySQL】MySQL(三)儲存過程和函式、觸發器、事務MySql儲存過程函式觸發器
- Oracle 過程(Procedure)、函式(Function)、包(Package)、觸發器(Trigger)Oracle函式FunctionPackage觸發器
- zabbix觸發器表示式詳解觸發器
- 瞭解使用mysql 的檢視、儲存過程、觸發器、函式....MySql儲存過程觸發器函式
- MySQL怎麼利用函式和觸發器實現非主鍵自增?MySql函式觸發器
- 【虹科乾貨】觸發器和函式:讓程式碼更接近資料觸發器函式
- PostgreSQL10.0preview功能增強-觸發器函式內建中間表SQLView觸發器函式
- Oracle觸發器觸發級別Oracle觸發器
- 函式計算 HTTP 觸發器支援非同步,解放雙手搭建 Web 服務函式HTTP觸發器非同步Web
- WPF基礎—佈局,樣式,觸發器觸發器
- oracle 建立表,序列,索引,檢視,觸發器,函式,儲存過程,定時器,包體Oracle索引觸發器函式儲存過程定時器
- Oracle觸發器6(建立系統事件觸發器)Oracle觸發器事件
- 根據業務寫觸發器(oracle觸發器片)觸發器Oracle
- oracle自動生成編譯所有函式、儲存過程、觸發器的語句Oracle編譯函式儲存過程觸發器
- Oracle檢視錶、儲存過程、觸發器、函式等物件定義語句Oracle儲存過程觸發器函式物件
- mysql——觸發器MySql觸發器
- mysql 觸發器MySql觸發器
- SQL觸發器SQL觸發器
- Mysql觸發器:MySql觸發器
- Oracle觸發器Oracle觸發器
- mysql觸發器MySql觸發器
- goldengate 觸發器導致oracle 表空間不能onlineGo觸發器Oracle
- CSS遮罩/定位下面元素不能觸發CSS遮罩
- BTEQ中不能用length函式函式
- 【SQL Server】-- 一觸即發之觸發器SQLServer觸發器
- mysql繞過行觸發器,實現語句觸發器MySql觸發器
- sqlserver 列觸發器SQLServer觸發器
- 除錯觸發器除錯觸發器