賽迪網 > IT技術 數據庫 > 精彩更新
  IT資訊搜索
 
IT產品搜索
[程式開發][網管世界][網路安全][數據庫技術]
[作業系統][嘉賓聊天·線上訪談][活動集錦]
[精彩專題][Symantec專區][訂閱IT技術週刊]
[開發論壇][網管論壇][安全論壇][數據庫論壇]
[作業系統論壇][Sybase專區][IBM dW技術專區]
[病毒求助][病毒與漏洞播報][文檔·源碼下載]

事務保存點在一個訂購系統中的使用情況

發佈時間:2008.07.21 05:00     來源:賽迪網    作者:茶晶

【賽迪網-IT技術報道】保存點提供了一種機制,用於回滾部分事務。可以使用 SAVE TRANSACTION savepoint_name 語句創建一個保存點,然後再執行 ROLLBACK TRANSACTION savepoint_name 語句回滾到該保存點,從而無須回滾到事務的開始。

在不可能發生錯誤的情況下,保存點很有用。在很少出現錯誤的情況下使用保存點回滾部分事務,比讓每個事務在更新之前測試更新的有效性更為有效。更新和回滾操作代價很大,因此只有在遇到錯誤的可能性很小,而且預先檢查更新的有效性的代價相對很高的情況下,使用保存點才會非常有效。

下面的示例顯示保存點在一個訂購系統中的使用情況。該系統中存貨不足的可能性很小,因為該公司具備有效的供應商和再訂購點。通常應用程式在嘗試更新訂購記錄時,會先驗證手邊是否有足夠的存貨。該示例假定由於某種原因(如連接到一個低速的數據機或廣域網上),先驗證可用存貨的數量代價相對較大。可將應用程式編寫為只進行更新,而且如果收到錯誤資訊,表明庫存不足時,將回滾該更新。在這種情況下,在插入之後快速檢查 @@ERROR 比在更新之前驗證庫存數量速度要快得多。

InvCtrl 表有一個 CHECK 約束,如果 QtyInStk 列低於 0,就會觸發 547 號錯誤。OrderStock 過程創建一個保存點。如果出現 547 錯誤,它將回滾到該保存點,並將當前手邊有的項目數返回給調用進程。然後調用進程可以決定是否需要針對手邊現有的數量重新下訂單。如果 OrderStock 返回一個 0,則調用進程知道當前有足夠的存貨,可以滿足訂購需要。

SET NOCOUNT OFF

GO

USE pubs

GO

CREATE TABLE InvCtrl

(WhrhousID int,

PartNmbr int,

QtyInStk int,

ReordrPt int,

CONSTRAINT InvPK PRIMARY KEY

(WhrhousID, PartNmbr),

CONSTRAINT QtyStkCheck CHECK (QtyInStk > 0) )

GO

CREATE PROCEDURE OrderStock @WhrhousID int, @PartNmbr int,

@OrderQty int

AS

BEGIN TRANSACTION StkStock

DECLARE @ErrorVar int

SAVE TRANSACTION StkOrdTrn

UPDATE InvCtrl SET QtyInStk = QtyInStk - @OrderQty

WHERE WhrhousID = 1

AND PartNmbr = 1

SELECT @ErrorVar = @@error

IF (@ErrorVar = 547)

BEGIN

ROLLBACK TRANSACTION StkOrdTrn

RETURN (SELECT QtyInStk

FROM InvCtrl

WHERE WhrhousID = @WhrhousID

AND PartNmbr = @PartNmbr)

COMMIT TRANSACTION

END

ELSE

COMMIT TRANSACTION

RETURN 0

GO

insert InvCtrl(WhrhousID,PartNmbr,QtyInStk)values(1,1,2)

update InvCtrl set QtyInStk=2 where WhrhousID=1

exec OrderStock 1,1,1

(責任編輯:盧兆林)


[ 發表評論 ] 字體[  ] [ 列印 ] [ 進入博客 ] [ 進入論壇 ]  [ 推薦給朋友 ]
  相關文章
  客戶需求反饋表
* 姓  名:
更多資料  了解方案  認識廠商
* 單位名稱:
* 聯繫電話:
* 電子郵件:
  賽迪推薦  
  手機·資費 ·新品·導購·評測·手機資費·寬帶
手機搜索  諾基亞 N73 MOTO Z6
  IT產品 ·筆記本·臺式機·伺服器·列印·投影
IT產品搜索 
  IT技術 ·開發·網管·安全·數據庫·作業系統
  資訊化 ·熱點·專題·訪談·週刊·方案案例
· 網站建設市場重新洗牌 一卡通引領革命潮流
· 北京加快資訊化建設 醫保一卡通年底前啟動
· ERP案例分析 SaaS帶來衝擊 IT服務商面臨挑戰
· 通方期貨CRM解決方案 房地產行業CRM解決方案
  IT博客 ·曾劍秋·項立剛·Java學習·網管
  IT技術論壇 ·開發·網管·安全·數據庫·系統