首页 > 解决方案 > DB2 中的 PLSQL 是否支持嵌套的 while 语句?

问题描述

我对 DB2 数据库有以下查询:

    BEGIN
        DECLARE NUMBER_OF_ROWS INT;
        DECLARE ITER_INDX_1 INT;
        DECLARE ITER_INDX_2 INT;
        SET ITER_INDX_1 = 0;
        SET ITER_INDX_2 = 0;
        SET NUMBER_OF_ROWS = (SELECT COUNT(*) FROM LOOPS.LTV_BEISPIEL);
        WHILE ITER_INDX_1 < NUMBER_OF_ROWS DO
            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;
    END
    ;

NUMBER_OF_ROWS查询 COUNT 语句后变量 id 设置为 10。由于有两个 WHILE 语句,其中一个是嵌套的,因此这段代码必须产生 10*10=100 次插入,但由于某种原因,它只进行 10 次插入。我的逻辑有错误还是 DB2 中的错误?

标签: sqlplsqldb2

解决方案


ITER_INDX_2在第一个循环之后您没有重置:

        SET ITER_INDX_1 = ITER_INDX_1 + 1;
        SET ITER_INDX_2 = 0;

因此,回答您的问题:这是您的代码中的错误。

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

   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;

推荐阅读