1

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

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

4

1 回答 1

2

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;
于 2020-03-01T08:31:16.927 回答