Как уволить работу намеренно - PullRequest
5 голосов
/ 02 июля 2010

Можно ли намеренно прервать работу через программу COBOL. Предположим, у меня есть входной файл с записями Header, Detail и Trailer. Я напишу pgm на языке COBOL, который читает этот файл. Если в этом файле не найдены подробные записи, то я хочу прервать свою работу, предоставив некоторое сообщение об окончании и некоторый код об окончании. Это возможно?

Ответы [ 5 ]

8 голосов
/ 02 июля 2010

Вы хотите отменить свою программу или просто установить RETURN-CODE ?

Я подозреваю, что установка RETURN-CODE, запись сообщения и затем завершение программы через STOP RUN или GOBACK - это все, что вы действительно хотите сделать.Вызывать фактический ABEND может не потребоваться.

В пакетной среде IBM RETURN-CODE, установленный вашей программой, становится RC для шага задания JCL, под которым была запущена программа.Обычно это то, что вы хотите установить и проверить.

RETURN-CODE устанавливается с помощью MOVE, вводя для него числовое значение.Например:

         DISPLAY 'No Detail Records found in file.'
         MOVE 16 TO RETURN-CODE
         GOBACK.

Вы также можете создать дамп программы из программы, запущенной в Language Environment (опция IBM Mainframe), используя утилиту CEE3DMP - Создать дамп .

В старых программах IBM Mainframe COBOL вы можете увидеть вызовы подпрограммы ILBOABN0.Этот вызов завершил вашу программу и выпустил дамп.Эта процедура теперь устарела в пользу описанной выше методики.

Наконец, действительно старые программы могут содержать код для генерации аварийных сигналов.Это может быть сделано любым количеством способов, но деление на ноль часто было любимым:

        DIVIDE SOME-NUMBER BY ZERO GIVING SOME-NUMBER.

Работает каждый раз!

Лично я рекомендую установить RETURN-CODE вместо вызова ILBOABN0 или методы исключения данных.

Примечание: Специальный регистр RETURN-CODE не является частью стандарта COBOL-85.Он доступен как расширение IBM для языка.Возможно, вам придется прибегнуть к другому механизму, если вы работаете в среде, не совместимой с IBM.

3 голосов
/ 02 июля 2010

см. Следующую ссылку о том, как установить код возврата, переданный обратно на шаг задания JCL, а также принудительно вызвать код Abened.http://www.tek -tips.com / viewthread.cfm? QID = 1058302 & страница = 22 * ​​1003 *

2 голосов
/ 11 сентября 2013

Во-первых, вы должны проверить, что принято рабочими стандартами вашего магазина / сайта. У большинства команд уже есть приемлемый способ намеренно прекратить программу по «логической» причине. Одна компания, в которой я работал, имеет очень простую программу под названием SYSABND2, которая, как мне кажется, написана на ассемблере, которая вызывается просто для завершения программы.

При этом для ABEND (а не просто для установки кода возврата) вы должны вызвать модуль CEE3ABD (или предыдущую версию ILBOABN0 , которая теперь не рекомендуется).

Подробнее см .:

0 голосов
/ 10 февраля 2017

Да, вы можете намеренно прервать вашу работу через программу COBOL, просто вызвав один модуль, который не существует.Это даст S806 код завершения.

0 голосов
/ 29 декабря 2010

Одним из способов ненормального завершения работы является вывод сообщения на пользовательский терминал или оператору в компьютерном центре мэйнфрейма и, возможно, на принтер, если необходимо, все в зависимости от типа компьютера, на котором должна быть установлена ​​программа.запускать на.В cobol можно использовать DISPLAY UPON .. и использовать идентификатор для терминала, консоли оператора или принтера, как определено в записи в разделе SPECIAL-NAMES ОТДЕЛЕНИЯ ОКРУЖАЮЩЕЙ СРЕДЫ.Пример может быть похож на это, используя правильные имена устройств для вашего случая. OPERATOR-CONSOLE IS OUT-OP2 в специальных именах с DISPLAY «RUN ERROR - NO DETAIL RECORDS, ABORTING« UPON OUT-OP2 и DISPLAY »ОТЧЕТ МЕНЕДЖЕРУ ОПЕРАЦИЙ»UPON OUT-OP2 и STOP RUN.в процедуре разделения.Ссылка на обстоятельство должна быть включена в любую работу или макрокоманду и инструкцию по эксплуатации.

...