是否可以通过 COBOL 程序故意放弃您的工作。假设我有一个包含 Header、Detail 和 Trailer 记录的输入文件。我将编写一个读取此文件的 COBOL pgm。如果在此文件中找不到详细记录,那么我想通过提供一些异常结束消息和一些异常结束代码来终止我的工作。这可能吗?
5 回答
你想 ABEND 你的程序还是只设置一个RETURN-CODE?
我怀疑设置 RETURN-CODE,写一条消息,然后通过 a STOP RUN
or终止程序GOBACK
是你真正想做的一切。可能不需要引起实际的 ABEND。
在 IBM 批处理环境中,您的程序设置的 RETURN-CODE 成为运行该程序的 JCL 作业步骤的 RC。这通常是您要设置和测试的内容。
RETURN-CODE
是通过向其设置MOVE
数值来设置的。例如:
DISPLAY 'No Detail Records found in file.'
MOVE 16 TO RETURN-CODE
GOBACK.
您还可以使用CEE3DMP--Generate dump 实用程序从在语言环境(IBM 大型机选项)下运行的程序发出程序转储。
在较旧的 IBM Mainframe COBOL 程序中,您可能会看到对ILBOABN0
例程的调用。此调用异常终止您的程序并发出转储。现在,该例程已被贬低以支持上述技术。
最后,真正旧的程序中可能包含用于生成异常终止的代码。这可以通过多种方式完成,但除以零通常是最受欢迎的:
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 IS OUT-OP2 在特殊名称中使用 DISPLAY “RUN ERROR - NO DETAIL RECORDS, ABORTING” UPON OUT-OP2 并 DISPLAY “REPORT TO OPERATIONS MANAGER”在 OUT-OP2 上并停止运行。在程序划分中。任何工作或宏观和操作说明中都需要包含对情况的引用。
Yes, it is possible to abend your job intentionally through COBOL program by simply calling one module which doesn't exist. It will give S806 abend code.