sql - 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 中的错误?
解决方案
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;
推荐阅读
- mysql - 将两行结果查询合二为一
- c++ - 如何将由 2 个以上单词组成的字符串加载到字符串数组中
- python - 如何使用这个用 Numpy 构建的集合字典来提高性能?
- java - OpenCV:如何只保留透明像素并将它们设置为白色?
- python - 我有几个关于 python qpainter pyqt5 的问题
- mysql - 如何在mysql中只转储一天的数据库?
- python-3.x - Django 时区不会记录用户的时区
- java - BrowserMobProxy:如何确定代理服务器的 IP?
- google-api - Google Drive API - 列出文件的权限
- python-3.x - 如何从字典中打印字典的值在python中列出的键