首页 > 解决方案 > DB2 SQLPL - 无法退出无限循环

问题描述

我创建了一个存储过程,通过遍历 DB2 示例数据库中员工表中的每一行来手动计算标准偏差 -

但是,该过程陷入了无限循环。我不确定它为什么会卡住,因为我SQLSTATE在阅读桌子上的最后一行并希望退出后预计不会是“00000”。问题是什么?我该如何调试?我如何解决它?

标签: sqldb2sql-pl

解决方案


SQLSTATE变量在每个语句之后重置,除了GET DIAGNOSTICS. 这就是为什么每次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;

推荐阅读