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列转行的实现