plspl中回滾怎麼用
A. spring中事務回滾,如何設置
單寫一個介面,介面中再定義提交和回滾,在介面中判斷。
比如有兩個sql語句,第一個執行了後,判斷是否有異常、錯誤。如果第一個出現異常等,那麼直接就停止了。
若第一個sql執行通過了,第二個報錯。那麼你調用介面中的回滾就可以了。
好久不做開發了。詳細代碼沒法說。也許說的不怎麼對。你驗證一個。當然思路基本就這樣的。
B. 用存儲過程實現回滾
程序功能
在SQL Server資料庫中建立兩個表:USER表和USERDOC表。其中USER表中存放的是注冊用戶的用戶名和密碼,USERDOC表中存放的是該注冊用戶的個人資料,並且以用戶名為索引。下面是表USER和USERDOC的定義:
Create Table USER(userName varchar(30),userPasswd varchar(30))
Create Table USERDOC(userName varchar(30),Age int,Sex int,PhoneNumber varchar(20),Address varchar(50))
當用戶請求注冊時,ASP腳本先將用戶名和密碼插入到USER表中,然後在USERDOC表中插入用戶個人信息(年齡、性別、聯系電話和家庭住址等)。同時,應用程序還必須保證USER表中的每一條記錄在USERDOC表中都有相應的記錄。
利用ASP內置ADO組件中的Connection對象可以實現對資料庫操作的事務性處理。Connection對象的部分方法如下:
●Connection.BeginTrans方法:啟動一個事務;
●Connection.CommitTrans方法:完成/提交一個事務;
●Connection.RollBackTrans方法:撤消/放棄一個事務。
//啟動一個事務操作
<% Conn.BeginTrans %>
<% sqlText=「Insert into USER(userName,userPasswd) values(『」 %>
<% sqlText=sqlText & request(「usrName」) & 「』,『」&request(「usrPasswd」)&「』) 」 %>
<% conn.execute(sqlText) %>
<% if conn.Errors.Count>0 then %>
<% conn.Errors.Clear %>
//如果插入數據操作失敗,則事務向前回滾
<% conn.RollBackTrans %>
<% response.Redirct RegisterFail.html %>
<% end if %>
<% sqlText=「Insert into USERDOC(userName,Age,Sex,PhoneNumber,Address) 」%>
<% sqlText=sqlText & 「values(『」& request
(「usrName」) & 「』, 」 & request(「Age」) %>
<% sqlText=sqlText & 「,『」 & request
(「PhoneNum」) & 「』,『」 %>
<% sqlText=sqlText & request(「Address」) & 「』) 」 %>
//執行事務單元中的第二條插入語句
<% conn.execute(sqlText) %>
<% if conn.Errors.Count>0 then %>
<% conn.Errors.Clear %>
//如果操作失敗,則事務向前回滾
<% conn.RollBackTrans %>
<% response.Redirct RegisterFail.html %>
<% end if %>
//如果整個事務操作執行正確,則提交事務
<% Conn.CommitTrans %>
//轉向注冊成功處理頁面
<% response.Redirct RegisterOk.html %>
C. 如何在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,將會滾整個事務處理。
D. oracle中設置回滾點問題,回滾一次後這個點就沒有了么
原因是因為drop是DDL語句,而oracle的rollback只支持DML語句。
所以如果你使用delete,可以回滾,但DDL的drop直接修改了數據字典,使表的數據不在數據字典中存放了,oracle就認為student不存在,也就無法回滾了。
E. sql中的存儲過程里怎麼寫事務回滾啊
直接在存儲過程結束之前添加以下代碼:
EXCEPTION WHEN OTHERS THEN rollback;
解釋:以上語句的意思是當出現任專何錯誤的時候,直接回屬滾整個事務。
備註:存儲過程中建議沒有特殊需求的情況下,在執行結束之前不要進行commit,否則在中途提交,後面的代碼保存,只能回滾到commit的位置。
F. PLSQL事務提交了,要怎麼回滾
如何啟動Transaction; 共有三種方式
1.自動transaction
每句statement都是一個transaction.例一個update指令更新多筆紀錄, 要就全部成功, 只要失敗,全部會回復原值.
2.ExplicitTransaction
以Begin Transaction開始(開啟)
3.ImplicitTransaction (建議不要用)
以Set Implicit_Transaction ON
如何結束Transaction; 共有三種方式
1. COMMIT Transaction(提交)
Transaction期間的任何修改,都會保證到資料庫中
2. ROLLBACK Transaction(回滾)
數據會回復Transaction前狀態
3. KILL <SPID> 強迫停止, 會rollback
G. PLSQL 中只是查詢命令,為什麼 提交和回滾 圖標也亮起來了。是哪裡設置的問題嗎,請哪位達人指點一下。
有些查詢命令比如用到了資料庫鏈,需要跨庫,資料庫不知道你是否做了對其他資料庫需要提交的操作.故會提示你提交和回滾.
H. Oracle中的回滾
就三條回滾了
第二條:
INSERT INTO nn values('abc','aaa');
第三條:
INSERT INTO nn values('def','ddd');
第四條:
INSERT INTO nn values('ghi','ggg');
因為create table想回滾也回滾不了
當上邊這條未提交,直接回滾的話,就相當於資料庫沒有寫入
I. 在Access中如何回滾,請大俠指點!
ACCESS不支持事務,哪裡來的回滾概念呢?根本就不是企業級的資料庫啊。
J. ORACLE資料庫中的回滾問題
只要你設置的回滾表空間夠大,數據量多也可以回滾,主要看你分配的回滾空間。
執行的時候斷電,資料庫會自動回滾的。