我最近发布了一个主机报告程序的更新。我们的商店使用 Enterprise PLI。
我添加了 2 个声明为 BASED 的新结构。所以我基本上使用 ALLOC 语句为结构分配所需的存储空间,然后将指针传递给 Fetchable 以获得我需要的一些细节。
它在生产试运行期间因存储错误而失败(下面的 LEMSG)。它试图在那里处理超过一百万条记录,看来这项工作基本上已经用完了存储空间。
IBM0451S ONCODE=451 The STORAGE condition was raised.
From entry point MXXX at compile unit offset +000001EA at entry offset
更多细节:IBM0451S
作为修复,我正在发布更新以在 Fetchable 调用之后为存储显式添加免费,并且我还将 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
=============================================