我创建了一个存储过程,通过遍历 DB2 示例数据库中员工表中的每一行来手动计算标准偏差 -
但是,该过程陷入了无限循环。我不确定它为什么会卡住,因为我SQLSTATE
在阅读桌子上的最后一行并希望退出后预计不会是“00000”。问题是什么?我该如何调试?我如何解决它?
该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;