DB2循环的用途在DB2数据库中是很广泛的,下面就为您介绍四种常见的DB2循环用法,希望可以在您学习DB2循环方面有所帮助。
1.利用得到的游标在存储过程中循环:
DECLARECUR_FEESETCURSORWITHRETURNTOCALLERFOR( SELECT -- FROM表 WHERE条件 ); OPENCUR_FEESET;--得到游标 --得到游标记录数 SELECT count(CIF_CSTNO) intov_count FROMCB_CSTINFA,CB_CSTBSNINFB WHEREA.CIF_STT<>'3'ANDA.CIF_CSTNO=B.CBI_CSTNO;-- FETCHCUR_FEESETINTOV_CSTNO,V_FEECODE,V_CSTLEVEL,V_FEEMODE;-- WHILEV_COUNT>0DO …….. FETCHCUR_FEESETINTOV_CSTNO,V_FEECODE,V_CSTLEVEL,V_FEEMODE;-- ENDWHILE;--
2.另一种db2标准循环格式(leave、iterate 用法):
SETV_COUNT=LENGTH(V_VALIDAUTHCOMBOS);-- SETV_INDEX=0;-- AUTHLOOP: LOOP IFV_INDEX>=V_COUNTTHEN LEAVEAUTHLOOP;--相当于break ENDIF;-- .... SETV_INDEXV_INDEX=V_INDEX+1;-- ....... IF条件 THEN ITERATEAUTHLOOP;--相当于continue ENDIF;-- ENDLOOP;--
3.截取字符串的循环(设V_TEMP=‘CB1001|CB1002|CB1003|’):
SETV_LENGTH=LENGTH(V_TEMP); WHILEV_LENGTH>0DO SETV_POS=POSSTR(V_TEMP,'|'); SETV_CURRENT_BSN=SUBSTR(V_TEMP,1,V_POS-1); SETV_TEMP=SUBSTR(V_TEMP,V_POS+1); SETV_LENGTH=LENGTH(V_TEMP); --最后一个字段,不再截取 SETV_BSNTYPE=V_CURRENT_BSN; ENDWHILE;
4.游标循环(不用open 游标):
DROPPROCEDURETESTFOR; CREATEPROCEDURETESTFOR() LANGUAGESQL BEGIN DECLAREV_TEMP1VARCHAR(2); DECLAREV_TEMP2VARCHAR(70); FORV1ASCURSOR1CURSORFOR SELECTSTUDENT_IDASTEMP1,STUDENT_NAMEASTEMP2FROMSTUDENT DO DELETEFROMSTUDENTWHERESTUDENT_ID=TEMP1; SETV_TEMP1=TEMP1; SETV_TEMP2=TEMP2; ENDFOR; COMMIT; END;
【编辑推荐】
DB2创建数据库的实现
DB2目录视图说明
DB2创建表–带有自增列的表
DB2重命名表和查看表信息
DB2列转行的实现