sql - DB2 SQLPL - 无法退出无限循环
问题描述
我创建了一个存储过程,通过遍历 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;
推荐阅读
- google-sheets - 如果公式有帮助,谷歌表格公式,如果没有达到患者毕业日期的标准,请留空?
- mongodb - mongo 查询的格式化响应
- javascript - 如何设置算法以使程序执行2个数字的增量
- javascript - 如何阻止 Google 工作表生成重复表单?
- python - 我需要删除 unnamed: level_0 标题和此输出中该行中的其他列标题,并将列标题直接放在下面的行
- angular - 如何使 Angular 使用限制性内容安全策略 (CSP)
- linux - 此版本的 MongoDB 太新,无法在现有数据文件上启动。尝试 MongoDB 4.2 或更早版本
- c# - 使用 Microsoft.Graph 添加管理器
- sql - sql中的动态滚动平均值
- json - 来自 GeoJSON 的点未显示在 MapBox GL JS 地图上