存儲過程 遊標

1。在存儲過程中,使遊標,可以根據每條記錄的某個字段的取值的不同,來採取相應的處理。這就是流程控制。
2。對於大的事務,可以分成一個個小事務來提交。如你所舉的例子,其實一個update語句邏輯上是可以完成這個功能的。可是要想到,現實中,回滾段是有限度的。如果一個update語句所更新的記錄需要佔用很大的回滾段,而現有的回滾段都不能滿足需要的話,只好用遊標來一條條update,然後用多次提交的辦法來完成整個事務。

 

CREATE    TRIGGER tg_dc_prc ON dc_prc_factor
FOR UPDATE
AS
set nocount on
if update(factor_code)
begin
  declare @factorCode nvarchar(10),@factorCode2 nvarchar(10),@policyCode nchar(10),@formula nvarchar(400)
  select @factorCode='{'+rtrim(deleted.factor_code)+'}' from deleted
  select @factorCode2='{'+rtrim(inserted.factor_code)+'}' from inserted

  declare formula_cursor cursor for select policy_code,formula from dc_prc_policy where formula = @factorCode
  open formula_cursor
  fetch next from formula_cursor into @policyCode,@formula
  while @@fetch_status=0
  begin
    select @formula=replace(@formula,@factorCode,@factorCode2)
    update dc_prc_policy set formula=@formula where policy_code=@policyCode
    fetch next from formula_cursor into @policyCode,@formula
  end
  close formula_cursor
  deallocate formula_cursor
end


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章