2010-07-02 36 views
4

是否有可能通過COBOL程序故意讓您的工作異常結束。 假設我有一個輸入文件,其中包含Header,Detail和Trailer記錄。我將寫一個COBOL pgm來讀取這個文件。如果在這個文件中沒有找到Detail記錄,那麼我想通過給出一些Abend消息和一些Abend Code來緩解我的工作。是否可能?如何故意緩和工作

回答

7

想要將程序退出還是隻需設置RETURN-CODE

我懷疑設置RETURN-CODE,書面方式留言 ,然後通過STOP RUNGOBACK終止程序是所有 你真正想做的事情。導致實際的ABEND可能不是必需的。

在IBM批處理環境中,由程序設置的RETURN-CODE成爲運行程序的JCL作業步驟的 RC。這通常是你想要設置和測試的內容。

RETURN-CODEMOVE設置爲一個數字值。例如:

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

您也可以發行使用 的CEE3DMP--Generate dump 實用程序的語言環境下運行的程序(IBM大型機 選項)中的程序轉儲。

在舊的IBM Mainframe COBOL程序中,您可能會看到對ILBOABN0例程的調用。這個電話 abended您的程序併發布轉儲。此例程現在爲depreciated,贊成上面列出的 技術。

最後,真正舊的程序可能會在其中生成代碼來生成異常終止。這可以通過多種方式來完成,但是被零除是 往往喜愛:

 DIVIDE SOME-NUMBER BY ZERO GIVING SOME-NUMBER. 

屢試不爽!

個人而言,我建議設置RETURN-CODE來呼叫ILBOABN0或數據異常技術。

注意: RETURN-CODE特殊寄存器不是COBOL-85標準的一部分。它可以作爲IBM對該語言的擴展。如果您在非IBM兼容環境中工作,則可能需要採取其他機制。

3

有關如何設置傳回給JCL作業步驟的返回代碼以及強制加密代碼,請參閱以下鏈接。 http://www.tek-tips.com/viewthread.cfm?qid=1058302&page=22

+1

ILBOABN0(在鏈接頁面上提及)現在已被棄用。而外部鏈接不是答案,你應該在這裏總結一下。除了更令人愉快之外,與網站鏈接往往不會總是呆在周圍,尤其是像這樣的網站。谷歌的「tek-tips.com」,你會發現至少有兩個中斷時間,人們抱怨。 – Abacus 2014-01-31 21:53:15

0

做運行的異常結束的一種方法是,以輸出一個消息發送到用戶終端或在大型計算機中心,並在必要時可能在打印機的操作者,所有這取決於計算機的類型的程序是被運行。在cobol中,可以使用DISPLAY UPON ..並使用ENVIRONMENT DIVISION SPECIAL-NAMES部分條目中定義的終端,操作員控制檯或打印機的標識符。一個例子可能與此類似,使用正確的設備名稱爲您的案件 操作員控制檯是特殊名稱與顯示「運行錯誤 - 沒有詳細記錄,流出」的輸出OP2和 顯示「報告運營經理「的輸出OP2和停止運行。在程序劃分。 對環境的提及需要包含在任何工作或宏觀和操作說明中。

2

首先,你應該檢查一下你自己的商店/網站的工作標準。爲了「邏輯」的原因,大多數團隊已經有了一種可以接受的方式來故意收縮程序。我工作的一家公司有一個叫做SYSABND2的非常簡單的程序,我相信它是用匯編語言編寫的,這個程序被稱爲只是用來收縮程序。

這就是說,到ABEND(不只是設置返回代碼),你應該調用模塊CEE3ABD(或以前版本ILBOABN0,現在不建議使用)。

有關詳細信息,請參閱:

0

是的,這是可能的異常終止你的工作故意通過COBOL程序通過簡單地調用不存在的一個模塊。它會給S806異步代碼。

+1

如果程序不使用動態CALL,該怎麼辦?那將如何生成S806? – 2017-02-10 11:56:20