信息产业培训网

事务保存点在一个订购系统中的使用情况

http://www.miiceic.org.cn   2008-7-21 8:57:31   中程在线   浏览数:
关键字:事务保存点 使用 情况

  保存点提供了一种机制,用于回滚部分事务。可以使用 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

来源:CCID
相关连接
最新评论
*以下网友发言不代表中程在线网站的观点和看法
    我要评论

    请您注意
    1、遵守中华人民共和国的各项有关法律规定
    2、承担一切因您的行为而导致的法律责任
    3、本网留言管理人员有权删除其管辖留言内容
    4、您在本网的留言本网有权在网站内转载和引用
    5、参与本留言即表明您已经阅读并接受上述条款
    我爱研发网中电华信阿里西西JAVA爱好者北京英才网全球大学查询网
    中国人的网站导航中国电脑论坛信息产业部新浪科技搜狐IT信息产业部电子教育与考试中心
    IT世界网软件项目交易网中国软件交易网国信培训网亚远景科技....[更多]
    关于我们 | 网站地图 | 周边住宿 | 行车路线 | 联系我们 | 网站律师 | 意见反馈 | 虚位以待 | 友情链接
    中程在线(北京)科技有限公司 版权所有
    总 部:北京市海淀区青东商务楼A座西四层
    企业培训部:010-52636110 52636106 就业培训部:010-68716925 68716926
    邮 件:training@miiceic.org.cn
    京ICP备06053134号
    Copyright © 2005-2008 Miiceic.org.cn All Rights Reserved