重要なアプリケーション プログラムが、明確な理由もなく SQLSTT='42912' を返しています。私たちの V7R2 開発パーティションは先週末に PTF が適用され、少しリファクタリングした後、今日プログラムを再コンパイルしました。プログラムは Dev と私の V7R1 (ため息) オフライン システムで正しく動作します。オブジェクト コードを、まだ 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 に少なくとも 1 つの欠陥があることを示しています。別の解決策は、更新された列を定義することです (100 以上あります) が、更新された列を識別できるツールがあります (パフォーマンスが向上します)。
SQL ドキュメントの WRT カーソル更新を読み間違えたのでしょうか、それともこれは本当のエラーですか?