程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> DB2數據庫 >> DB2教程 >> DB2存儲過程中的兩種指針循環方式

DB2存儲過程中的兩種指針循環方式

編輯:DB2教程

DB2存儲過程相信大家都比較了解了,下面為您介紹的是DB2存儲過程中的兩種指針循環方式,希望對您學習DB2存儲過程能有所幫助。

DB2存儲過程中的指針循環:

DB2存儲過程有2種那個方式:for循環和while循環,如:

for循環:

  1. for c1 as select deliveryid,deliverycode from delivery where status=40 for read only do  
  2.  
  3. select sum(qty) into dQty from deliverydetail where deliveryid=c1.deliveryid;  
  4.  
  5. ......  
  6.  
  7. end for;  

while循環:

  1. declare c1 cursor for select deliveryid,deliverycode from delivery where status=40 for read only ;  
  2.  
  3. DECLARE CONTINUE HANDLER FOR NOT FOUND SET at_end_c1 = 1;  
  4.  
  5. set at_end_c1=0;  
  6. open c1 ;  
  7. FETCH c1 INTO ndeliveryid ,sdeliverycode;  
  8. WHILE ( at_end_c1 = 0) do  
  9.      select sum(qty) into dQty from deliverydetail where deliveryid=ndeliveryid ;  
  10.  
  11. ...  
  12.  
  13. set at_end_c1=0;  
  14.     FETCH c1 INTO ndeliveryid ,sdeliverycode;  
  15. END while ;  
  16. close c1;  

很明顯,for循環比while循環簡單很多

而且,對於while循環,如果不注意,很容易出現死循環

一般建議使用for循環.

但是,有時候必須使用while循環。

如果在循環中有事務,比如在循環中有一塊要求獨立事務,對於那一塊,如果執行成功 ,就提交這一塊,如果執行不成功,就回滾這一塊,繼續下一個循環,之時候就只能用while循環。

因為,當commit的時候,會自動關閉當前指針。

在while循環中,如果要commit而不關閉當前指針,要在定義指針的時候加with hold,上面的指針定義為:

  1. declare c1 cursor with hold for select deliveryid,deliverycode from delivery where status=40 for read only ; 

對於for循環是沒有辦法處理的。

如果需要用rollback,需要定義savepoint,然後回滾到指定的回滾點。
 

DB2創建數據庫的實現

DB2目錄視圖說明

DB2數據庫命令大全

DB2裝入命令的性能因素

DB2列轉行的實現

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved