中止 ASRA。如何处理这个
Posted
技术标签:
【中文标题】中止 ASRA。如何处理这个【英文标题】:Abend ASRA. How to deal with this 【发布时间】:2012-04-21 07:42:24 【问题描述】:我有一个地图,它有两个数据类型为 X(6),9(8) 的输入字段 我将这两个值存储在我的 cobol-cics 程序中的以下变量中。
01 SCREEN-DATA.
05 ACTNUM PIC X(6).
05 AMOUNT PIC 9(8).
现在我将这两个值传递给 cobol-db2 程序:
CALL UPDATEPROG USING ACTNUM,AMOUNT.
在我的更新程序中:
LINKAGE SECTION.
01 DEPOSITPARAMS.
05 ACTNUM PIC X(6).
05 AMOUNT PIC 9(8).
PROCEDURE DIVISION USING DEPOSITPARAMS.
MOVE ACTNUM TO ACCOUNT-NUMBER.
其中 ACCOUNT-NUMBER 是我创建的表的主变量。 运行程序很好,但是在我的地图中,当我输入详细信息并按下回车键时,我得到了异常终止。当我给出一些静态值时,例如:将 071250 移至帐户号。它工作正常,我能够更新,使用查询从表中检索值。这可能是什么原因导致异常结束。请帮我解决这个问题
这些是我在 DCLGEN 中创建的主变量
01 DCLACCOUNT-MASTER.
10 ACCOUNT-NUMBER PIC X(6).
10 ACCOUNT-HOLDER PIC X(20).
10 ACCOUNT-BALANCE PIC S9(8)V9(2) USAGE COMP-3.
10 LAST-UPDT-DATE PIC X(10).
10 OPENNING-DATE PIC X(10).
我所做的另一个观察是,无论我在哪里使用 ACTNUM 变量,即链接部分变量。我正在异常结束
【问题讨论】:
小心你的调用/链接。调用程序通过引用传递两个参数 (CALL UPDATEPROG USING ACTNUM,AMOUNT
),但被调用程序只接收一个参数 (PROCEDURE DIVISION USING DEPOSITPARAMS
)。这可能在这种特定情况下起作用,因为调用程序和被调用程序的工作存储/链接以允许这样做的方式布局,但通常这可能会导致问题,因为地址可能并不总是正确排列。最好在调用程序和被调用程序中保持参数列表之间的 1:1 关系。
【参考方案1】:
我猜你的意思是ASRA 用于异常终止代码。
查看核心转储,如果您使用TEST 选项编译,您应该有一个格式化转储,显示您的工作存储、本地存储和链接部分变量及其值。我怀疑您的 AMOUNT 字段中有非数字值。
在 CICS 中,写入 CESE 瞬态数据队列的核心转储,通常由 CICS 系统程序员映射到 CICS 区域的 CEEMSG DD。在 CEE3845 上进行查找以找到核心转储的顶部,这是语言环境消息的消息 ID,其中包含对错误和导致异常结束的详细描述。
【讨论】:
【参考方案2】:验证您阅读地图的区域的 COBOL 定义是否与地图返回的区域实际匹配。我建议运行 CEDF 并仔细查看 READ MAP 在调用返回时填充的区域。我怀疑你会发现不匹配的地方。
【讨论】:
【参考方案3】:在您的代码中,添加以下内容:
链接部分。 01 存款参数。05 LINKAGE-REF S9(4) COMP-3。
05 ACTNUM PIC X(6). 05 数量 PIC 9(8)。
【讨论】:
不,这根本没有意义。你能解释一下你认为这有什么帮助吗?以上是关于中止 ASRA。如何处理这个的主要内容,如果未能解决你的问题,请参考以下文章