中止 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。如何处理这个的主要内容,如果未能解决你的问题,请参考以下文章

如何处理触发器中的错误?

了解开发人员如何处理棕地项目

Apache spark如何计算分区以及在executor中如何处理分区

如何保证消息的可靠性传输?或者说,如何处理消息丢失的问题?

开玩笑测试 - 如何处理 JsonWebToken 响应

使用mockmvc测试如何处理无序数组