| 自由形式構文 | SETLL{(EHMR) } 検索引数 名前 |
| コード | 演算項目 1 | 演算項目 2 | 結果フィールド | 標識 | ||
|---|---|---|---|---|---|---|
| SETLL (E) | 検索引数 | 名前 (ファイルまたはレコード様式) | NR | ER | EQ | |
SETLL 命令は、ファイルをキーまたは相対レコード番号が検索引数 に指定された検索引数 (キーまたは相対レコード番号) オペランドに等しいかそれより大きい次のレコードに位置付けます。ファイルは全手順ファイルでなければなりません。
検索引数 (検索引数) は、レコードの検索に使用するキーまたは相対レコード番号でなければなりません。 アクセスがキーによる場合には、検索引数 はフィールド名、名前の付いた固定情報、 形象定数、またはリテラルの形式の単一キーにすることができます。キー・フィールドの検索 例については、図 2 を参照してください。
ファイルが外部記述ファイルの場合、検索引数 は KLIST 名、値のリスト、または %KDS の形式の複合キーにすることもできます。KLIST を
使用して指定されたキーの場合、キー・フィールドはファイル内のキーと同じ CCSID である必要があります。データ構造内の検索引数の図については、%KDS (データ構造の検索引数)の終わりにある例を参照してください。 
アクセスが相対レコード番号による場合には、検索引数 に整数のリテラルまたは小数点以下の桁数がゼロの数値フィールドを入れなければなりません。
名前 オペランドは必須で、ファイル名またはレコード 様式名のいずれかが可能です。レコード様式名を使用できるのは、外部記述ファイルの場合だけです。
結果の標識はこの命令の状況を反映します。 検索引数がファイルの一番大きいキーまたは相対レコード番号より大きい場合にオン に設定される標識を 71 から 72 桁目に指定することができます。 この情報は %FOUND 組み込み関数 からも入手することができます。この関数は、レコードが見付からない場合は '0' を 戻し、レコードが見付かった場合は '1' を戻します。
SETLL 例外 (ファイル状況コードが 1000 より大きい) を 処理するために、命令コード拡張 'E' またはエラー標識 ER を指定できますが、 両方を指定することはできません。 エラー処理の詳細については、ファイル例外/エラーを 参照してください。
そのキーまたは相対レコード番号が検索引数に等しいレコードが存在する場合にオン に設定される標識を 75-76 桁目に指定することができます。この情報は %EQUAL 組み込み関数からも入手することが できます。この関数は、等しい項目が見付かった場合に '1' を戻します。
75 から 76 桁目の標識または %EQUAL を指定して SETLL を使用する場合、指定されたキーとファイル内の実際のキーの比較は通常、データ管理機能により実行されます。 データ管理機能でこれを実行できない場合は、16 進数照合シーケンスを使用して比較が実行されます。 この場合、予想通りの結果が得られないことがあります。 詳しくは、Rational Development Studio for i ILE RPG プログラマーの手引きのセクション『キー付きファイルの使用による予期しない結果』を参照してください。
名前 が下限に設定されているファイル名である場合、ファイルは、指定された検索引数 (検索引数) に等しいかそれより大きいキーまたは相対レコード番号の最初のレコードに位置付けられます。
名前 に下限に設定されているレコード様式名が入っている場合、ファイルは、指定された検索引数 (検索引数) に等しいかそれより大きいキーまたは相対レコード番号の指定されたタイプの最初のレコードに位置付けられます。
特殊値 *START および *END を 検索引数 として指定できます。
*START はファイルの始めに位置指定し、*END
はファイルの終わりに位置指定します。どちらの位置付けも、キー付きファイルに使用される照合順序とは関係なく行なわれ、
ヌル値キー・フィールドにも関係なく行われます。検索引数 に
*START または *END のいずれかを指定する場合には、次のことに注意してください。

ファイルの位置付けに形象定数を使用することもできます。
ただし、*LOVAL または *HIVAL を使用してもファイルの先頭または最終レコードに
正確にファイルが位置付けされないシチュエーションがいくつかあります。
ファイル中の先頭または最終レコードに位置付けしたい場合は、*START または *END を
使用するほうが確実です。

複合キーを持つファイルで使用する場合には、形象定数は、キーのそれぞれ
のフィールドに形象定数の値が入っているものとして処理されます。 SETLL で *LOVAL を使用すると、
ヌル可能キー・フィールドのあるレコードがファイルに含まれていない場合は、最初の読み取り操作で
取り出されるのが一番小さいキーを持つレコードになるようにファイルが位置付けられます。
ほとんどの場合
(重複キーを使用できない場合) に、*HIVAL では、ファイルは、READP でファ
イルの最後のレコードが検索されるか、または READ でファイルの終わりの指示が
受け取られるように位置付けられます。 しかし、*LOVAL および *HIVAL を使用
する場合には次の事例に注意してください。
降順のキーを持つ外部記述ファイルでは、
*HIVAL は最初の読み取り操作で取り出されるのが最も大きいキーを持つレコードになるようにファイルを位置付け、
*LOVAL は READP 命令で取り出されるのが最も小さいキーを持つレコードになるようにファイルを位置付けます。 
ヌル可能キー・フィールドがある場合に *LOVAL や *HIVAL などの形象定数が使用され
ると、ヌル値キーを持つレコードは検索で検出されません。 

図 1 に、SETGT 命令 での形象定数の使用法を示します。形象定数は、SETLL 命令で も同様に使用されます。
ヌル値可能フィールドおよびキーを持つレコードの処理については、データベースのヌル値サポートを参照してください。
詳細については、ファイル命令を参照してください。
次の例では、ファイル ORDFIL に注文レコードが入っています。 キー・フィールドは注文番号 (ORDER) フィールドです。 それぞれの注文には複数のレコードがあります。 演算仕様書では、ORDFIL は次の ようになっています。
*...1....+....2....+....3....+....4....+....5....+....6....+....7...+....
CL0N01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiLoEq....
*
* ORDFIL の中の 101 のレコードがすべて印刷されます。値 101 は前に
* ORDER に入れられています。SETLL 命令では、ファイルはキーの値が
* ORDER に入れられています。SETLL 命令では、ファイルはキーの値が
* %EQUAL が ’1’ を戻します。
C
C ORDER SETLL ORDFIL
C
* 次の DO ループでは、同じキーの値を持つすべてのレコードが処理
* されます。
C
C IF %EQUAL
C DOU %EOF
C ORDER READE ORDFIL
C IF NOT %EOF
C EXCEPT DETAIL
C ENDIF
C ENDDO
C ENDIF
C
* READE 命令は、最初の 101 レコードを読み取ったのと同じ方法で
* 2 番目、3 番目、4 番目の 101 レコードを読み取ります。
* 4 番目の 101 レコードが読み取られた後で READE 命令が実行されます。
* 102 レコードは同じグループのものでないために
* %EOF が ’1’ を戻し、EXCEPT 命令が回避され、
* DOU ループが終了します。
