日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

oracle 存储过程设置回滚点,(转)oracle 存储过程事宜使用断点回滚 -savepoint

發布時間:2024/9/27 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 oracle 存储过程设置回滚点,(转)oracle 存储过程事宜使用断点回滚 -savepoint 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

學習存儲過程中使用斷點回滾事務時,發現目前網絡上存在一個問題,那就是使用斷點回滾后,都忘記了一個很重要的事情,提交事務。雖然使用了斷點回滾,但是斷點回滾不像rollBack或commit一樣結束當前事務,而使用斷點回滾只會回滾到聲明斷點的地方,之前的產生的事務仍需要提交的,如果不提交,事務一直在數據庫中緩存.

Demo:

procedure doSomeThing(p_number out number) as

begin

insert into t_test_user_mingming(id,loginname,password,realname,type)

values(se_test_user_mingming_id.nextval,'xiaoming','1234','小明',1);

p_number := 1;

savepoint ps;--- 設置斷點 ps

insert into t_test_info_mingming(id,pal,type,create_time,note)

values(se_test_info_id.nextval,'我想買臺thinkPad 可以俺莫有錢',1,sysdate,'ceshi');

p_number := 2;

savepoint sp;----設置斷點 sp

insert into t_test_agent(agent_id) values(1);---我這里此行會拋出異常 ORA-01400? 可以替換為下句 手動拋出一個異常

-----RAISE_APPLICATION_ERROR (-20004,'拋出的異常玩玩');

commit;

exception? --捕獲異常

when others then

rollback to ps;? ---- 如果產生異常,回滾到斷點 ps

p_number :=0;

commit;? --- 提交事務

end doSomeThing;

這里本人做了實驗,如果在異常中不加 commit 語句,使用PL/SQL測試時,異常在緩存,t_test_user_mingming 表中沒有數據記錄。

存儲過程里的事務操作:

create?or?replace?procedure?pr_mypro2(p_a?in?varchar2,p_b?in?varchar2,p_count?out?number)

temp?varchar2(1000);???/*定義臨時變量*/

is

begin

select?code?into?p_count?from?table1?where?a=p_a;?/*查詢并返回值*/

temp?:=?p_count;??/*將返回值賦給臨時變量*/

savepoint?point1;??/*保存點*/

insert?into?table2(a,b)values(temp,p_b);?/*將臨時變量值添加到新表的字段*/

savepoint?point2;

insert?into?

?exception???

??????when???others???then???

??????????rollback?to?savepoint?point1;??/*異常處理,保存點下面的操作都不會被執行*/

?????????return;?

end;

保存點(SAVEPOINT)是事務處理過程中的一個標志,與回滾命令(ROLLBACK)結合使用,主要的用途是允許用戶將某一段處理回滾而不必回滾整個事務。

如果定義了多個savepoint,當指定回滾到某個savepoint時,那么回滾操作將回滾這個savepoint后面的所有操作(即使后面可能標記了N個savepoint)。

例如,在一段處理中定義了五個savepoint,從第三個savepoint回滾,后面的第四、第五個標記的操作都將被回滾,如果不使用ROLLBACK TO savepoint_name而使用ROLLBACK,將會滾整個事務處理。

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的oracle 存储过程设置回滚点,(转)oracle 存储过程事宜使用断点回滚 -savepoint的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。