【PL/I学習|初心者向け】PL/Iでエラー発生時のキーを特定する!ONKEY組み込み関数の活用法

1. 導入:なぜONKEYが必要なのか?

メインフレームのバッチ処理において、VSAMなどの索引ファイルを取り扱う際、最も頭を悩ませるのが「どのデータでエラーが発生したのか」という特定作業です。何百万件ものレコードを処理している最中にエラーが起きても、キー情報がわからなければ原因究明に時間がかかってしまいます。ここで役立つのがPL/Iの組み込み関数「ONKEY」です。これを使うことで、エラー発生時のキー値を即座に取得し、ログに出力させることができます。

2. 基礎知識:ON-Unitsと組み込み関数

PL/Iには「ON-Units(オンユニット)」という例外処理の仕組みがあります。これは、ファイル入出力エラーや計算エラーが発生した際、あらかじめ指定しておいたコードブロックを自動実行する機能です。
「ONKEY」は、このON-Unitsの実行中に使える「組み込み関数」の一つです。現在の処理状況(コンテキスト)をシステムが保持しており、エラーが起きた瞬間に「どのキーでエラーが起きたか」を関数呼び出し一つで教えてくれるのです。

3. 実装:エラー処理の設計

実装のポイントは、ON-Unitをエラーが発生する可能性のあるファイル処理の前に配置しておくことです。これにより、エラー発生時に「どのIDでエラーが起きたか」を特定し、プログラムを安全に終了させる、あるいはエラーログを出力して処理を継続するなどの制御が可能になります。

4. サンプルプログラム

以下は、VSAMファイル読み込み時にエラーが発生した際、ONKEYを使ってそのキーを表示するサンプルです。

/ VSAMファイル読み込みのエラー処理例 /
ON KEY(VSAMFILE) BEGIN;
   / エラーが発生したキーを取得してログに出力 /
   PUT LIST('【エラー発生】対象キー値: ' || ONKEY());
   / 必要に応じて処理を中断 /
   STOP;
END;

/ ファイルの読み込み処理 /
READ FILE(VSAMFILE) INTO(RECORD_AREA) KEY(SEARCH_KEY);

5. 応用と注意点:現場での活用テクニック

現場で活用する際の重要な注意点がいくつかあります。

スレッド局所性の理解
ONKEYは「現在発生している例外」に対して情報を返すため、ON-Unitのブロック内から呼び出す必要があります。メイン処理の中でただ呼び出しても、正しい値は返ってきません。

モダンな設計への応用
もし、将来的にJavaなどの他言語へ移行することを考慮しているなら、単にログを出すだけでなく、独自の「エラー情報保持用構造体」にONKEYの値を詰め込み、エラーハンドリング用のサブルーチンへ渡す設計にすることをお勧めします。これにより、後続の移行作業が非常にスムーズになります。

デバッグ時の罠
ON-Unitを定義し忘れると、標準のエラーハンドリングが働き、プログラムが即座に異常終了してしまいます。重要なファイル処理を行う前には、必ずON-Unitを設定する癖をつけておきましょう。

コメント

タイトルとURLをコピーしました