エラー処理命令

例外処理命令コードには次のものがあります。

これらの命令コードは、従来型の構文と自由形式構文の両方で使用可能です。

MONITOR、ON-ERROR および ENDMON は、監視グループをコーディングするために使用されます。 監視グループは、監視ブロックに 1 つまたは複数の ON-ERROR ブロックが続き、さらに ENDMON が続いて構成されています。

監視ブロックには、エラーを発生させる可能性があると思われるコーディングを入れます。 ON-ERROR ブロックには、監視ブロック内で発生するエラーを処理するコーディングを入れます。

監視ブロックは、MONITOR 命令と、それに続く監視の対象となる命令で構成されます。ON-ERROR ブロックは、状況コードのリストと、それに続けて、リストされている状況コードが監視ブロックの中でのエラーによって生成された場合に実行されるべき命令で構成されます。

監視ブロック内でエラーが発生し、命令に (E) 拡張またはエラー標識がある場合、エラーはその (E) 拡張またはエラー標識によって処理されます。 エラーを処理できる標識または拡張がない場合、制御は、そのエラーに対応する状況コードを含んでいる ON-ERROR ブロックに渡されます。 ON-ERROR ブロックが終了すると、制御は ENDMON に渡されます。 エラーを処理する ON-ERROR ブロックがない場合は、制御は例外処理の次のレベル (*PSSR または INFSR サブルーチン、またはデフォルトのエラー処理プログラム) に渡されます。

図 1. MONITOR ブロックおよび ON-ERROR ブロックの例
/free
   MONITOR;                           _
       OPEN   FILE;                    |
       DOW    getNextRecord ();        |
         X = X + 1;                    +-- これが監視ブロックです
         nameList(X) = name;           |
       ENDDO;                          |
       CLOSE  FILE;                   _|
   ON-ERROR   1216;                   _
       DSPMSG                          |
          ('Error opening file FILE'   |
         : %status);                   +-- 第 1 の ON-ERROR ブロック
       RETURN;                        _|
   ON-ERROR   121;                    _
       DSPMSG                          |
          ('Array NAME is too small'   +-- 第 2 の ON-ERROR ブロック
         : %status);                   |
       RETURN;                        _|
   ON-ERROR   *ALL;                   _
       DSPMSG                          |
          ('Unexpected error'          +-- 最終の、あらゆる場合を処理する
         : %status);                   |
       RETURN;                        _|
   ENDMON;                            --- MONITOR グループの終わり
/end-free