一个关键应用程序无缘无故地返回 SQLSTT='42912'。我们的 V7R2 开发分区上周末是 PTF 的,经过一些重构后,我今天重新编译了程序。该程序在 Dev 和我的 V7R1 (sigh) 离线系统中正常工作;当我将目标代码移动到尚未 PTF 的 V7R2 生产分区时,程序失败并出现此错误。
我声明了一个游标“FOR UPDATE”,而不是指定要更新的列(意味着所有列都符合条件)。错误消息“无法更新列 HVR00001”表示我正在尝试更新未在 DECLARE CURSOR 语句中定义的列。我的任何代码中都不存在列 HVR00001,我恭敬地建议此错误消息将发送很多人进行狙击狩猎。
从此开始...
EXEC SQL
DECLARE gsr010_frp001_cursor CURSOR WITH HOLD FOR
SELECT *
FROM frp001
WHERE fhpro = :fhpro
FOR UPDATE;
打开游标后,如下:
EXEC SQL
FETCH NEXT FROM gsr010_frp001_cursor INTO :frp001;
在大量的应用程序代码和 SQL 之后,这就是失败的地方:
EXEC SQL
UPDATE frp001
SET ROW = :frp001
WHERE CURRENT OF gsr010_frp001_cursor;
将程序编译到 V7R1M0 可以消除错误,这表明 PTF 至少有一个缺陷。另一种解决方案是定义更新的列(超过 100 个),但我有一个工具可以识别更新的列(这对性能会更好)。
我是否误读了 SQL 文档 WRT 游标更新,或者这是一个真正的错误?