亚洲精品久久久中文字幕-亚洲精品久久片久久-亚洲精品久久青草-亚洲精品久久婷婷爱久久婷婷-亚洲精品久久午夜香蕉

您的位置:首頁技術文章
文章詳情頁

關于ORA-04091異常的出現原因分析及解決方案

瀏覽:7日期:2023-05-30 16:13:45
目錄
  • 1、異常出現的場景.
  • 2、問題分析
  • 3、解決方案

1、異常出現的場景.

:在使用Hibernate做為項目持久層的情況下,需要對某一張表進行一個擴展,擴展操作便是在該表上創建一個觸發器。將表中的數據讀入到其他表中。

-4091,ORA-04091: 表 DD123.DO_TABLE_47 發生了變化, 觸發器/函數不能讀它

SQL語句如下:

Sql代碼

drop table tr_table;
create table tr_table( --觸發器作用表
tab_id number primary key,
tab_name varchar2(30) NOT NULL
)
create table ts_table as select * from tr_table; --提供擴展功能的表
--定義的觸發器,在tr_table表插入和更新數據之后向ts_table表插入當前操作的信息行。
create trigger iu_table
after insert or update on tr_table
for each row
begin
insert into ts_table select * from tr_table t where t.tab_id = :new.tab_id;
end is_table;
--對tr_table執行插入操作,觸發ts_table插入操作
insert into tr_table(tab_id,tab_name) values(1,"test");
--彈出錯誤信息提示
--ORA-04091:表tr_table發生了變化 觸發器/函數不能讀它
--ORA-06512: 在iu_table line 2
--ORA-04088: 觸發器iu_table 執行過程中出錯

2、問題分析

:在Oracle中執行DML語句的時候是需要顯示進行提交操作的。當我們進行插入的時候,會觸發觸發器執行對觸發器作用表和擴展表的種種操作,但是這個時候觸發器和插入語句是在同一個事務管理中的,因此在插入語句沒有被提交的情況下,我們無法對觸發器作用表進行其他額外的操作。如果執行其他額外的操作則會拋出如上異常信息。

3、解決方案

:1,我們知道,出錯的原因是因為觸發器和DML語句在同一事務管理中,所以方案一便是將觸發器和DML語句分成兩個單獨的事務處理。這里可以使用Pragma autonomous_transaction; 告訴Oracle觸發器是自定義事務處理。

SQL語句如下:

Sql代碼

create trigger iu_table
after insert or update on tr_table
for each row
declare --這里是關鍵的地方,在變量申明的地方,指定自定義事務處理。
pragma autonomous_transaction;
begin
insert into ts_table select * from tr_table t where t.tab_id = :new.tab_id;
--這里需要顯示提交事務
commit;
end iu_table;
 create trigger iu_table
		after insert or update on tr_table
		for each row
		declare  --這里是關鍵的地方,在變量申明的地方,指定自定義事務處理。
		pragma autonomous_transaction; 
		begin
			insert into ts_table select * from tr_table t where t.tab_id = :new.tab_id;
		--這里需要顯示提交事務
			commit;
		end iu_table;

:2,在Oracle Trigger中有:new,:old兩個特殊變量,當觸發器為行級觸發器的時候,觸發器就會提供new和old兩個保存臨時行數據的特殊變量,我們可以從倆個特殊的變量中取出數據執行擴張表的DML操作。

SQL語句如下:

create trigger iu_table
after insert on tr_table
for each row
begin
insert into ts_table(tab_id,tab_name) values(:new.tab_id,:new.tab_name);
--這里需要注意,要知道不同的觸發類型其特殊變量:new和:old保存的值的區別。
--commit; 注意使用方案二,這里不能顯示的進行提交操作操作,trigger中在沒有聲明自定義事務管理的時候,不能執行顯示提交。
end iu_table;   

到此這篇關于關于ORA-04091異常的出現原因,以及解決方案的文章就介紹到這了,更多相關ORA-04091異常內容請搜索以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持!

標簽: Oracle
主站蜘蛛池模板: 亚洲精品欧美一区二区三区 | 国产在线拍揄自揄视频不卡99 | 狠狠色综合久久婷婷 | 成人亚洲国产精品久久 | 性欧美一级毛片在线播放 | 日韩手机在线免费视频 | 国产精品国产香蕉在线观看网 | 成人国产精品 | 精品国内一区二区三区免费视频 | 调教套上奶牛榨乳器喷奶水 | 国产高清视频网站 | www黄色网| 欧美蜜桃臀在线观看一区 | 天堂影院jav成人天堂免费观看 | 天天影视色香欲综合网老头 | 91短视频免费在线观看 | 欧美女交 | 黄色三级影院 | 在线观看香蕉视频 | 99久热只有精品视频免费观看17 | 亚洲免费一级片 | 成人在线视频观看 | 丁香六月婷婷激情 | 国产亚洲精品精品国产亚洲综合 | 欧美一区二区在线 | 亚洲成a人片在线观看播放 亚洲成a人片在线播放观看国产 | 特黄日韩免费一区二区三区 | 日本黄色性生活片 | 99视频精品免视3 | 日韩中文字幕高清在线专区 | 特黄日韩免费一区二区三区 | 97国产成人精品视频 | 91香蕉嫩草| 免费看色视频 | 米奇精品一区二区三区在线观看 | 精品国产福利在线观看91啪 | 青青久操视频 | 久久亚洲私人国产精品va | 亚洲成人免费网站 | 成人欧美一区二区三区小说 | 亚洲精品天堂一区二区三区 |