【发布时间】:2023-03-10 01:20:01
【问题描述】:
是否可以通过 COBOL 程序故意放弃您的工作。 假设我有一个包含 Header、Detail 和 Trailer 记录的输入文件。我将编写一个读取此文件的 COBOL pgm。如果在此文件中没有找到详细记录,那么我想通过提供一些异常消息和一些异常代码来终止我的工作。这可能吗?
【问题讨论】:
是否可以通过 COBOL 程序故意放弃您的工作。 假设我有一个包含 Header、Detail 和 Trailer 记录的输入文件。我将编写一个读取此文件的 COBOL pgm。如果在此文件中没有找到详细记录,那么我想通过提供一些异常消息和一些异常代码来终止我的工作。这可能吗?
【问题讨论】:
您是要 ABEND 程序还是只设置一个 RETURN-CODE?
我怀疑设置了 RETURN-CODE,写了一条消息
然后通过STOP RUN 或GOBACK 终止程序即可
你真的想做。导致实际的 ABEND 可能没有必要。
在 IBM 批处理环境中,您的程序设置的 RETURN-CODE 成为 用于运行程序的 JCL 作业步骤的 RC。这通常是你 想要设置和测试。
RETURN-CODE 由 MOVE 设置一个数值。例如:
DISPLAY 'No Detail Records found in file.'
MOVE 16 TO RETURN-CODE
GOBACK.
您还可以从在语言环境下运行的程序发出程序转储(IBM 大型机选项)使用 CEE3DMP--Generate dump 实用程序。
在较早的 IBM Mainframe COBOL 程序中,您可能会看到对 ILBOABN0 例程的调用。这个电话
异常终止您的程序并发出转储。这个例程现在是depreciated 支持
上述技术。
最后,非常老的程序中可能包含用于生成异常终止的代码。这可以通过多种方式完成,但除以零是 通常是最喜欢的:
DIVIDE SOME-NUMBER BY ZERO GIVING SOME-NUMBER.
每次都有效!
就个人而言,我建议设置 RETURN-CODE 而不是调用 ILBOABN0 或数据异常技术。
注意: RETURN-CODE 特殊寄存器不是 COBOL-85 标准的一部分。它作为 IBM 对该语言的扩展提供。如果您在与 IBM 不兼容的环境中工作,您可能需要使用不同的机制。
【讨论】:
请参阅以下链接,了解如何设置返回代码传递回 JCL 作业步骤以及强制使用 Abened 代码。 http://www.tek-tips.com/viewthread.cfm?qid=1058302&page=22
【讨论】:
首先,您应该检查您自己的商店/网站的工作标准所接受的内容。大多数团队已经有了一种公认的方式,可以出于“逻辑”原因故意终止程序。我工作的一家公司有一个非常简单的程序,叫做 SYSABND2,我相信它是用汇编程序编写的,调用它只是为了终止程序。
也就是说,要 ABEND(不仅仅是设置返回码),您应该调用模块 CEE3ABD(或以前的版本 ILBOABN0,现在已弃用)。
详情见:
【讨论】:
运行异常结束的一种方法是将消息输出到用户终端或主机计算机中心的操作员,必要时还可能输出到打印机,这一切都取决于程序要使用的计算机类型运行。在 cobol 中,可以使用 DISPLAY UPON .. 并使用在 ENVIRONMENT DIVISION 的 SPECIAL-NAMES 部分中的条目中定义的终端、操作员控制台或打印机的标识符。一个示例可能与此类似,为您的案例使用正确的设备名称 OPERATOR-CONSOLE 在特殊名称中为 OUT-OP2,在 OUT-OP2 上显示“运行错误 - 无详细记录,正在中止”和 在 OUT-OP2 上显示“向运营经理报告”并停止运行。在程序划分中。 任何工作或宏指令和操作说明中都需要提及该情况。
【讨论】:
是的,只需调用一个不存在的模块,就可以通过 COBOL 程序有意地终止您的工作。它会给出 S806 异常终止代码。
【讨论】: