最近、HOST レポート プログラムのアップデートを発行しました。当店はEnterprise PLIを使用しています。
BASED として宣言された 2 つの新しい構造を追加しました。したがって、私は基本的に ALLOC ステートメントを使用して構造体に必要なストレージを割り当て、ポインタを Fetchable に渡して必要な詳細を取得します。
本番環境でのパイロット実行中にストレージ エラーで失敗しました (以下の LEMSG)。そこでは 100 万件を超えるレコードを処理しようとしていましたが、そのジョブは基本的にストレージを使い果たしたようです。
IBM0451S ONCODE=451 The STORAGE condition was raised.
From entry point MXXX at compile unit offset +000001EA at entry offset
詳細: IBM0451S
修正として、Fetchable 呼び出しの後にストレージに FREE を明示的に追加する更新を発行しています。また、JCL の REGION PARM を 0M に更新しました。
この種のエラーを以前に見たことがあるかどうかを確認し、追加の考えがあるかどうかを確認したいと思います. ありがとう。
これが私の最新の更新されたコードがどのように見えるかです
DECLARES
=======================================
DCL
01 IN_DATA BASED(IN_PTR),
% INCLUDE SYSLIB(XXXXXPAA);
DCL
01 OUT_DATA BASED(OUT_PTR),
% INCLUDE SYSLIB(YYYYYPAA);
DCL
01 IN_PTR PTR;
DCL
01 OUT_PTR PTR;
======================================
The below block of code runs for every record that get processed. The
FREE statement is what i now added. I was thinking that because i did
not have a FREE before , the ALLOC was basically getting new STOARGE
everytime it executed that block of code and ran out of storage.
ALLOC IN_DATA;
ALLOC OUT_DATA;
IN_DATA = '';
OUT_DATA = '';
IN_DATA.CODE = 'XXX';
CALL FABCD(IN_PTR,
OUT_PTR);
IF OUT_DATA.RTRN_CD <= 04 THEN
DETAIL_REC.XYZ = OUT_DATA.YYY_CODE;
ELSE
;
FREE IN_DATA; -------->> What i added now
FREE OUT_DATA; -------->> What i added now
=============================================