はじめに
キーが重複しているファイルをREADした際、ファイルポインタはどこに位置づけられるのでしょうか?
ファイルの先頭に位置づけられるのか、それとも不定なのか...
これまで確信が持てず、念のためSETLL *LOVALのように明示的に先頭へ位置づけられている方もいらっしゃるのではないでしょうか。
この件について、IBMシステム・テクニカル・サービス・センター様に確認し、重複キーにおける読み込み挙動についての理解が深まりましたので、ご紹介します。
事象
例えば、下図のように郵便番号をキーとするファイルがあるとします。

このファイルをEOFまで読み取り、その後「421-0115」でSETLLした場合、想定としては「高橋」さまレコードの前へ位置づけられることを期待しています。
しかし実際には、同じキーを持つ「伊藤」さま「渡辺」さまレコードの位置へ移動する可能性はあるのでしょうか?
回答(IBM様公式見解)
FIFO、LIFO、FCFOの指定が無い場合、同一のキーを持つレコードの読み込み順はシステム任せとなります。
そのため、以下のような並び順になることも考えられ、その場合は先頭の「伊藤」さまの行に位置付けられます。
いずれにしても「421-0115」のレコードが3件ある場合、READEは3回成功します。
おわりに
これまで明確な保証が分からず、SETLL *LOVALを用いて先頭に戻す処理を行うことがありましたが、その必要がないことが分かりました。
ご参考になれば幸いです。最後までお読み頂きありがとうございます。
