例外条件を処理する文

ON 文を使用すると、プログラムの実行中に発生する例外条件 (ファイル終了条件、ゼロによる除算などの計算上のエラーなど) に応答できます。次に例を示します。

ON ERROR 
   BEGIN;
      .
      .
      .
   END;

ON 文が実行されると、指定された条件が発生した場合に実行される文のブロックとして ON-unit が確立されます。ON 文の実行後にその条件が発生すると、処理が中断されて、指定された ON-unit が実行されます。上の例では、BEGIN 文と END 文の間の文のブロックが ON-unit として確立され、ERROR 条件が発生した場合に実行されます。ON 文が実行されるとすぐに ON-unit が実行されるわけではありません。

ON-unit は、自身を含むブロックの現在の有効化中に確立され、そのブロックがその呼び出し元に戻るか、同じブロックの有効化中に同じ条件に対して別の ON-unit が確立されるか、REVERT 文を使用して ON-unit が元に戻されるまで、確立されたままになります。

ブロックの実行中に可能な条件のいずれかが発生した場合に、そのブロックにその条件に対して確立された ON-unit がないと、呼び出し元ブロックの ON-unit を使用してその条件への応答が行われます。呼び出し元ブロックにもその条件に対して確立された ON-unit がない場合は、その呼び出し元の ON-unit が使用されます。その後も同じように遡っていき、どこまで遡ってもその条件の ON-unit がない場合は、デフォルトのアクションが実行されます。このデフォルトのアクションでは、ENDPAGE 条件、FINISH 条件、および UNDERFLOW 条件の場合を除き、プログラムの実行が中止されて、ランタイム エラー メッセージが生成されます。

ON-unit を呼び出す条件が検出されるたびに通知されるように設定することができます。これにより、ON-units でプログラムの状態を調べて、デバッグを補助したり、オプションのブレークポイントを設定したりできます。詳細については、「ON-unit 通知によるプログラムの状態の確認」を参照してください。

ERROR 条件の ON-units では、エラーが検出された文の実行を再開することはできません。