我对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
;查询COUNT语句后,NUMBER_OF_ROWS变量id设置为10。由于有两个WHILE语句,其中一个是嵌套的,这段代码必须生成10*10=100插入,但出于某种原因,它只执行10次插入。我的逻辑中是有错误,还是DB2中有错误?
发布于 2019-12-20 11:39:35
您不会在第一个循环之后重置ITER_INDX_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;https://stackoverflow.com/questions/59424690
复制相似问题