【问题标题】:SOC7 abend while comparing fields比较字段时 SOC7 异常
【发布时间】:2018-09-04 06:30:48
【问题描述】:

我在比较 2 个字段时异常结束 它们被定义为:

01 A   PIC S9(8) COMP VALUE 0.
01 B   PIC S9(5) COMP-3.

要异常结束的语句是:

PERFORM VARYING A FROM 1 BY 1 UNTIL A > B 

此语句在另一个循环中,并且 B 的值在那里增加。对于前两次迭代,B 的值是正确的。对于第 3 次迭代, B Displayed 的值是非数字的。

您能否建议在这里可以做什么?

【问题讨论】:

  • 看看是什么在更新 B 的存储。 S0C7 不会发生,因为一切正常。顺便说一句,你为什么要制作 B 压缩十进制?如果它仅用于与 A 进行比较,则最好使用相同的格式(二进制或压缩十进制)。
  • 正如@ErwinSmout 所说,您需要找到正在修改 B 的内容。请注意,如果 B 是重新定义的一部分,则它可能是实际正在修改的另一个值。
  • SOC7 表示尝试对非数字数据进行数字运算。所以在某些时候,其中一个变量包含非数字数据。
  • 大家好,谢谢您的建议。我将两个字段的格式都更改为相同,并且它起作用了。
  • 如果它的工作真棒。问题是它应该一直在工作:) 如果你有一个覆盖问题,你只是掩盖了它并没有解决它。警告购买者。

标签: cobol mainframe


【解决方案1】:

我们有这种情况,我们需要比较 2 个不同的数字字段,有时非数字数据会从外部系统中爬进来。我们所做的是使用与字节大小相等的PIC X(n) 重新定义字段,并对IF 语句保持NUMERIC 检查。像这样的东西-

    IF  WS-FIELD1 NUMERIC AND WS-FIELD2 NUMERIC
        IF WS-FIELD1 NOT = WS-FIELD2
***        both fields are numeric but not equal
        ELSE
***        both fields are numeric & equal
        END-IF
    ELSE
        IF WS-FIELD1-X NOT = WS-FIELD2-X
***        both fields are non-numeric & not equal
        ELSE
***        both fields are non-numeric but equal
        END-IF
    END-IF

我不确定您为什么将 PERFORM VARYING 用于数字字段,但我相信您可以将其放入上述代码的某个位置。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-22
    • 2021-10-06
    • 2011-08-26
    • 1970-01-01
    相关资源
    最近更新 更多