新聞中心
DB2存儲過程相信大家都比較了解了,下面為您介紹的是DB2存儲過程中的兩種指針循環(huán)方式,希望對您學(xué)習(xí)DB2存儲過程能有所幫助。

在虹口等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強發(fā)展的系統(tǒng)性、市場前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務(wù)理念,為客戶提供網(wǎng)站建設(shè)、成都網(wǎng)站建設(shè) 網(wǎng)站設(shè)計制作按需求定制設(shè)計,公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),品牌網(wǎng)站設(shè)計,成都全網(wǎng)營銷,成都外貿(mào)網(wǎng)站建設(shè),虹口網(wǎng)站建設(shè)費用合理。
DB2存儲過程中的指針循環(huán):
DB2存儲過程有2種那個方式:for循環(huán)和while循環(huán),如:
for循環(huán):
- for c1 as select deliveryid,deliverycode from delivery where status=40 for read only do
- select sum(qty) into dQty from deliverydetail where deliveryid=c1.deliveryid;
- ......
- end for;
while循環(huán):
- declare c1 cursor for select deliveryid,deliverycode from delivery where status=40 for read only ;
- DECLARE CONTINUE HANDLER FOR NOT FOUND SET at_end_c1 = 1;
- set at_end_c1=0;
- open c1 ;
- FETCH c1 INTO ndeliveryid ,sdeliverycode;
- WHILE ( at_end_c1 = 0) do
- select sum(qty) into dQty from deliverydetail where deliveryid=ndeliveryid ;
- ...
- set at_end_c1=0;
- FETCH c1 INTO ndeliveryid ,sdeliverycode;
- END while ;
- close c1;
很明顯,for循環(huán)比while循環(huán)簡單很多
而且,對于while循環(huán),如果不注意,很容易出現(xiàn)死循環(huán)
一般建議使用for循環(huán).
但是,有時候必須使用while循環(huán)。
如果在循環(huán)中有事務(wù),比如在循環(huán)中有一塊要求獨立事務(wù),對于那一塊,如果執(zhí)行成功 ,就提交這一塊,如果執(zhí)行不成功,就回滾這一塊,繼續(xù)下一個循環(huán),之時候就只能用while循環(huán)。
因為,當(dāng)commit的時候,會自動關(guān)閉當(dāng)前指針。
在while循環(huán)中,如果要commit而不關(guān)閉當(dāng)前指針,要在定義指針的時候加with hold,上面的指針定義為:
- declare c1 cursor with hold for select deliveryid,deliverycode from delivery where status=40 for read only ;
對于for循環(huán)是沒有辦法處理的。
如果需要用rollback,需要定義savepoint,然后回滾到指定的回滾點。
【編輯推薦】
DB2創(chuàng)建數(shù)據(jù)庫的實現(xiàn)
DB2目錄視圖說明
DB2數(shù)據(jù)庫命令大全
DB2裝入命令的性能因素
DB2列轉(zhuǎn)行的實現(xiàn)
網(wǎng)頁名稱:DB2存儲過程中的兩種指針循環(huán)方式
分享URL:http://www.dlmjj.cn/article/dhsojdp.html


咨詢
建站咨詢
