當前位置:首頁 » 存儲配置 » 存儲過程回滾

存儲過程回滾

發布時間: 2024-12-28 16:10:48

『壹』 存儲過程的問題 回滾

看你程序怎麼寫的,如果循環中每次插入每次提交自然回滾不了了,一般來說是整個作為一個事務,在發生錯誤異常處理時候做ROLLBACK。存儲過程自己沒有回滾功能,要你在程序中控制事務完整性的。如果你不寫commit也不寫rollback的話,自動作為一個事務整體會失敗,事務自動回滾,如果執行成功,事務結束則自動提交。

『貳』 JDBC調用存儲過程,存儲過程中事務回滾,報錯

ConnCloseThread中關閉連接的時候,不是立刻返回的。Connection.close()會觸發Connection.commit(),而因為調用的存儲過程中,存儲過程起了自己的事務,connection.commit()必須等到存儲過程結束才能完成(這個是microsoft論壇上看到的)。如果所有connection.close()都等到tx commit或rollback完成才執行的話,這個問題就不會出現了
從測試結果來看,凡是close connection耗時比execute statement短的,連接(物理連接)都會報出該問題。分析原因:通過weblogic datasource獲取的connection並不是物理connection,而是由weblogic wrapped的connection。這些conection在被close後,並不會關閉物理連接,而只是將物理連接還池。我們對connection的所有操作,最終都會被delegated到底層物理連接上,即commit(),rollback()最終都是在物理連接上執行。如果上面的connection.close(),底層物理連接沒有等到存儲過程事務結束就返回的話,那麼物理連接上應該還帶有此次操作的事務,而weblogic這邊不會關系物理連接的情況,直接將連接放入connection pool供其它客戶端使用。這時候如果設定了test on reserve的話,下次客戶端從data source獲取連接時,weblogic會檢查這個物理連接,作一個select操作的,這個有問題的連接就會暴露出來,也就是上面的異常。這個問題如果使用driver manager來獲取連接的話(如果每次都關閉的話),則不會出現,因為使用的物理連接每次都是不同的。還好,weblogic會幫忙重新創建有問題的連接。原因大概了解了,但這是誰的問題呢? 為什麼connection.close()不等存儲過程的事務結束?

結論:一般而言,我們不建議通過JDBC調用存儲過程的時候,在存儲過程中定義事務,應該將tx的管理工作交給jdbc去做。 non-xa如此,xa亦如此,畢竟事務嵌套了以後,管理起來是個問題,完整性更是個問題。

『叄』 存儲過程回滾 急

BEGIN TRY

END
BEGIN CATCH
END CATCH
用這個試試呢

『肆』 為什麼存儲過程總返回

你是用ExecuteNonQuery進行「添加」操作的把?

ExecuteNonQuery 不返回任何行數據,但映射到參數的任何輸出參數或返回值都會用數據進行填充。
對於查詢更新刪除操作UPDATE、INSERT 和DELETE 語句,返回值為該命令所影響的行數。
對於所有其他類型的語句,返回值為-1。如果發生回滾,返回值也為-1

如果執行了存儲過程,返回值必定是-1 , 因此不能根據返回值來判斷其是否執行成功。

『伍』 sql中的存儲過程里怎麼寫事務回滾啊

CREATE PROC [dbo].[notice_Delete] --- 同時刪除該通知書和對應的節點
@tbl VARCHAR(30),
@pid INT
AS
BEGIN
DECLARE @tblname VARCHAR(30) ;
DECLARE @sql VARCHAR(1000) ;
SET @tblname = @tbl
SET @sql = 'delete ' + @tblname + ' where id ='
+ CONVERT(VARCHAR(10), @pid)

BEGIN TRAN --開始事務

EXEC ( @sql
)
IF ( @@rowcount = 0 ) --執行結果影響行數為0
BEGIN
ROLLBACK TRAN --回滾
END
ELSE
BEGIN
DELETE FROM tbl_treenotice
WHERE purposeid = @pid
IF ( @@rowcount = 0 ) --執行結果影響行數為0
BEGIN
ROLLBACK TRAN --回滾
END
ELSE
BEGIN
COMMIT TRAN --提交事務
END
END
END

『陸』 sql存儲過程中事務出現錯誤回滾,那麼在回滾之後的語句會執行嗎

會的。

一般回滾操作都是寫在異常處理,或是sql的最後。如果你的sql中出現錯誤 ,代碼會立即跳轉到錯誤處理代碼上執行,比如回滾,但緊接在錯誤行之後的代碼不會執行的。


1.update .....;

2.select ......;
3.when Exception
....rollback;
4.insert into .....

以上偽代碼,如果行1出錯,行2將不會執行,直接跳轉到行3,然後行4 也會執行。

『柒』 mysql 存儲過程 異常 是否自動 回滾

是滴,默認是隱式的開始與提交,出現異常會默認自動回滾到開始位置,任何一個使用JDBC操作資料庫的SQL命令,在默認情況下,隱式開始與提交事務。當顯示的調用事物時,就必須顯示使用commit當使用rollback後也要進行commit;

熱點內容
c指針編程 發布:2024-12-29 06:34:35 瀏覽:387
linux伺服器加ip命令 發布:2024-12-29 06:34:33 瀏覽:798
c語言中的case 發布:2024-12-29 06:23:32 瀏覽:397
我的世界伺服器申請專屬ip 發布:2024-12-29 06:21:14 瀏覽:920
掃雷c語言代碼 發布:2024-12-29 06:10:51 瀏覽:139
python判斷對象屬性 發布:2024-12-29 06:10:09 瀏覽:413
備份隱形雲加密雲盤 發布:2024-12-29 06:10:06 瀏覽:898
精神病院葯房需要配置些什麼葯 發布:2024-12-29 05:48:12 瀏覽:365
和平精英安卓戴耳機槍聲大怎麼辦 發布:2024-12-29 05:46:01 瀏覽:500
javachar數組 發布:2024-12-29 05:43:46 瀏覽:615