DB2 SQLPL - 无法退出无限循环
DB2 SQLPL - Unable to exit Infinite loop
我创建了一个存储过程,通过遍历 DB2 示例数据库中 Employees Table 中的每一行来手动计算标准偏差 -
但是,程序陷入了死循环。我不确定为什么它会卡住,因为我预计 SQLSTATE
在阅读 table 的最后一行并希望退出后不会是“00000”。问题是什么?我该如何调试?我该如何解决?
除了 GET DIAGNOSTICS
之外,每个语句后 SQLSTATE
变量都会重置。这就是为什么每个 SQLSTATE
检查都必须立即跟在 FETCH
之后。这种循环处理还有另一种技术,它基于 NOT FOUND
条件的异常处理程序 + 在那里设置的标志变量。
以下是可能的解决方案之一。
OPEN cursor1;
FETCH FROM cursor1 INTO TEMP;
WHILE(SQLSTATE = '00000')
DO
SET SUM_SALARY = SUM_SALARY + TEMP;
SET SUM_SALARY_SQUARED = SUM_SALARY_SQUARED + (TEMP * TEMP);
SET NUM_ROWS = NUM_ROWS + 1;
FETCH FROM cursor1 INTO TEMP;
END WHILE;
我创建了一个存储过程,通过遍历 DB2 示例数据库中 Employees Table 中的每一行来手动计算标准偏差 -
但是,程序陷入了死循环。我不确定为什么它会卡住,因为我预计 SQLSTATE
在阅读 table 的最后一行并希望退出后不会是“00000”。问题是什么?我该如何调试?我该如何解决?
除了 GET DIAGNOSTICS
之外,每个语句后 SQLSTATE
变量都会重置。这就是为什么每个 SQLSTATE
检查都必须立即跟在 FETCH
之后。这种循环处理还有另一种技术,它基于 NOT FOUND
条件的异常处理程序 + 在那里设置的标志变量。
以下是可能的解决方案之一。
OPEN cursor1;
FETCH FROM cursor1 INTO TEMP;
WHILE(SQLSTATE = '00000')
DO
SET SUM_SALARY = SUM_SALARY + TEMP;
SET SUM_SALARY_SQUARED = SUM_SALARY_SQUARED + (TEMP * TEMP);
SET NUM_ROWS = NUM_ROWS + 1;
FETCH FROM cursor1 INTO TEMP;
END WHILE;