當前位置:首頁 » 存儲配置 » oracle存儲過程事務

oracle存儲過程事務

發布時間: 2022-08-01 04:10:45

❶ Oracle存儲過程,更新大量數據,如何循環分批次提交

可通過以下方法:

以100條數據為例,如果海量數據可參考。

如test表中有如下數據:

sql">declare
iint;--定義變數
v_countint;--定義變數
v_loopint;--定義變數
begin
selectcount(*)intov_countfromtest;--計算表內數據總數
selectceil(v_count/10)intov_loopfromal;--計算需要循環次數
i:=1;--為i賦值
whilei<=v_looploop--循環退出條件
updatetestsetbegintime=<=10;--執行更新
commit;--提交
i:=i+1;--i依次加1
endloop;--結束循環
end;

❷ 如何在ORACLE 存儲過程中設置回滾斷點

學習存儲過程中使用斷點回滾事務時,發現目前網路上存在一個問題,那就是使用斷點回滾後,都忘記了一個很重要的事情,提交事務。雖然使用了斷點回滾,但是斷點回滾不像rollBack或commit一樣結束當前事務,而使用斷點回滾只會回滾到聲明斷點的地方,之前的產生的事務仍需要提交的,如果不提交,事務一直在資料庫緩存.
Demo:
procere 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 procere 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,將會滾整個事務處理。

❸ 求助,關於java調用oracle存儲過程的事務控制的相關推薦

用java來調用存儲過程,一般我們已經把復雜的業務處理邏輯搬到了資料庫,也就是用存儲過程來實現,可以把事務控制放在存儲過程中來實現,這樣從效率上來說會好一些
如果只是移植了一部分業務的話,可以在java中控制事務(也可以藉助spring的事務管理),如rollback等,還是有效的

這個鏈接中有一部分東西,可以看看
http://bbs.csdn.net/topics/260019701

❹ Oracle的函數或者存儲過程是處於同一個事務里嗎

1. 返回值的區別,函數有1個返回值,而存儲過程是通過參數返回的,可以有多個或者沒有2.調用的區別,函數可以在查詢語句中直接調用,而存儲過程必須單獨調用.函數一般情況下是用來計算並返回一個計算結果而存儲過程一般是用來完成特定的數據操作(比...

❺ oracle存儲過程

分如下情況:
1。如果return 在commit之後,已經提交無所謂回滾。
2。如果return在commit之前,所有都回滾
3。如果希望中間有一部分回滾是不可能的,可以把中間的一部分提取出來成為一個單獨的存儲過程或者函數,把它設置為獨立事務控制,這樣執行這個存儲過程就會提交,其他的程序塊,可以通過rollback控制回滾。
獨立事務控制語法:
CREATE OR REPLACE PROCEDURE
IS
PRAGMA AUTONOMOUS_TRANSACTION;

❻ Oracle怎麼顯式開啟事務,開始事務跟鎖有什麼關系,在存儲過程中有時怎麼開啟和提交,回滾事務的

oracle使用語句savepoint sp_begintran開啟顯式事務,鎖本身和事務是沒有關系的,只要是資料庫的操作都會產生鎖。處於事務中的SQL語句只有這個事務提交(commit)之後,事務中的SQL語句影響的表記錄上的鎖才會釋放。鎖常見有共享鎖(select語句產生)和排它鎖(DML語句產生),如果一個表上載入有共享鎖,還可以疊加共享鎖,但不能疊加排它鎖。如果一個表上載入有排他鎖,就什麼鎖都不能加了,也就是說如果DML語句佔用過多的時間,這些資料庫效率就不高,就需要優化,當然select語句性能低了也不行。
每個存儲過程可以不用顯式事務,它本身就為你開啟了一個隱式事務,如果需要開啟顯示事務,就通過savepoint sp_begintran開啟,無論是不是顯式還是隱式事務,你都得通過commit work提交事務,通過exception捕捉SQL語句異常,在異常發生時需要回滾事務(rollback work)。

❼ oracle 存儲過程事務控制

把第一個commit去掉既可,如下:

create or replace procere aaa is
var2 number;
begin SELECT Seq_Tbtopic.nextval INTO var2 FROM al;
insert into tbTopic values (var2 , 1, 1, '口語3333',1,3,2,'','');

insert into tbchildtopic values (Seq_Tbchildtopic.Nextval,var2,'','ck','/kangsi/Resource/test/B1/1_2_2_1_Emily_ck_.mp3','ck');

commit;
end aaa;

❽ oracle 一個存儲過程可以包含幾個事務,為什麼

一個存儲過程可以包含多個事務,但一般,大家都不想看到前面的事務成功了,而後面的事務失敗的情況發生,因此,放一個事務,統管整個存儲過程就ok了。

❾ 請教執行多個oracle存儲過程的事務問題

你這樣屬於2個事務在操作一個表。如果表中有唯一鍵,會有一個過程失敗的。如果沒有唯一鍵,會寫入20000條記錄。但是如果存儲過程里操作的表是動態傳進去的。如果表名不同,同時執行多個這個存儲過程是沒有影響的。

❿ oracle存儲過程的commit和rollback

commit和rollback不止是存儲過程中使用,所有的事務都需要用到這兩個關鍵字
commit是指將你所做的update,insert,delete數據的更改提交資料庫,完成此次事務,相當於你去商場購物,售貨員給你開了票後,你去收銀台付款完畢,這樣你才可以拿到你要買的貨物.
rollback是指將你所做的update,insert,delete數據的更改恢復更改前的狀態,此次事務取消,相當於你去商場購物,售貨員給你開了票後,你卻不去收銀台付款,而是離開了商場

熱點內容
ios應用上傳 發布:2024-09-08 09:39:41 瀏覽:439
ios儲存密碼哪裡看 發布:2024-09-08 09:30:02 瀏覽:871
opensslcmake編譯 發布:2024-09-08 09:08:48 瀏覽:653
linux下ntp伺服器搭建 發布:2024-09-08 08:26:46 瀏覽:744
db2新建資料庫 發布:2024-09-08 08:10:19 瀏覽:173
頻率計源碼 發布:2024-09-08 07:40:26 瀏覽:780
奧迪a6哪個配置帶後排加熱 發布:2024-09-08 07:06:32 瀏覽:101
linux修改apache埠 發布:2024-09-08 07:05:49 瀏覽:209
有多少個不同的密碼子 發布:2024-09-08 07:00:46 瀏覽:566
linux搭建mysql伺服器配置 發布:2024-09-08 06:50:02 瀏覽:995