DB2中的PLSQL是否支持嵌套while语句?

DB2中的PLSQL是否支持嵌套while语句?,sql,plsql,db2,Sql,Plsql,Db2,我对DB2数据库进行了以下查询: 开始 声明行数INT; 宣布国际热核实验堆INDX 1完整; 宣布国际热核实验堆INDX 2 INT; 设置ITER_INDX_1=0; 设置ITER_INDX_2=0; 设置行数=从LOOPS.LTV\u beispel中选择COUNT*; 而ITER\u INDX\u 1

我对DB2数据库进行了以下查询:

开始 声明行数INT; 宣布国际热核实验堆INDX 1完整; 宣布国际热核实验堆INDX 2 INT; 设置ITER_INDX_1=0; 设置ITER_INDX_2=0; 设置行数=从LOOPS.LTV\u beispel中选择COUNT*; 而ITER\u INDX\u 1<行数 而ITER\u INDX\u 2<行数 插入循环。测试值1; 设置ITER_INDX_2=ITER_INDX_2+1; 结束时; 设置ITER_INDX_1=ITER_INDX_1+1; 结束时; 终止 ; 查询COUNT语句后,变量id设置为10的\u行数。由于有两个WHILE语句,其中一个是嵌套的,所以此代码必须生成10*10=100个插入,但由于某些原因,它只生成10个插入。我的逻辑中有错误还是DB2中有错误?

您没有在第一个循环后重置ITER\u INDX\u 2:

        SET ITER_INDX_1 = ITER_INDX_1 + 1;
        SET ITER_INDX_2 = 0;
因此,回答您的问题:这是代码中的一个bug

老实说,我会在循环的顶端这样做:

   WHILE ITER_INDX_1 < NUMBER_OF_ROWS DO
        SET ITER_INDX_2 = 0;
        WHILE ITER_INDX_2 < NUMBER_OF_ROWS DO
            INSERT INTO LOOPS.TEST VALUES (1);
            SET ITER_INDX_2 = ITER_INDX_2 + 1;
        END WHILE;
        SET ITER_INDX_1 = ITER_INDX_1 + 1;
    END WHILE;

PL/SQL是Oracle存储过程的名称。DB2只是有存储过程。@jarlh:这不完全正确。如果启用某些兼容性,DB2还支持Oracle的PL/SQLconfigurations@a_horse_with_no_name凉的我以前从未听说过这件事。谢谢我听说过,但上面的代码与PL/SQL不太相似。附带问题:为什么要循环?SQL是为集合数学而设计的,通常的方法是通过递归CTE或预制的数字表生成集合。尽管您的DB2版本是否支持用于插入的CTE是一个有趣的问题。。。