SETLL (下限の設定)

自由形式構文 SETLL{(EHMR)} 検索引数 名前
コード 演算項目 1 演算項目 2 結果フィールド 標識
SETLL (E) 検索引数 名前 (ファイルまたはレコード様式) NR ER EQ

SETLL 命令は、ファイルをキーまたは相対レコード番号が検索引数 に指定された検索引数 (キーまたは相対レコード番号) オペランドに等しいかそれよりより大きい次のレコードに位置付けます。ファイルは全手順ファイル (ファイル仕様書の 18 桁目の F によって識別される) でなければなりません。

検索引数 (検索引数) は、レコードの検索に使用するキーまたは相対レコード番号でなければなりません。 アクセスがキーによる場合には、検索引数 はフィールド名、名前の付いた定数、 形象定数、またはリテラルの形式の単一キーにすることができます。キー・フィールドの検索 例については、図 263 を参照してください。

ファイルが外部記述ファイルの場合、検索引数 は KLIST 名、値のリスト、または %KDS の形式の複合キーにすることもできます。 図形および UCS-2 のキー・フィールド には、そのファイル内のキーと同じ CCSID がなければなりません。 データ構造内の検索引数の図については、%KDS (データ構造の検索引数)の終わりにある例を参照してください。 アクセスが相対レコード番号による場合には、検索引数 に整数のリテラルまたは小数点以下の桁数がゼロの数値フィールドを入れなければなりません。

名前 オペランドは必須で、ファイル名またはレコード 様式名のいずれかが可能です。レコード様式名を使用できるのは、外部記述ファイルの場合だけです。

結果の標識はこの命令の状況を反映します。 検索引数がファイルの一番大きいキーまたは相対レコード番号より大きい場合にオン に設定される標識を 71 から 72 桁目に指定することができます。 この情報は %FOUND 組み込み関数 からも入手することができます。この関数は、レコードが見付からない場合は '0' を 戻し、レコードが見付かった場合は '1' を戻します。

SETLL 例外 (ファイル状況コードが 1000 より大きい) を 処理するために、命令コード拡張 'E' またはエラー標識 ER を指定できますが、 両方を指定することはできません。 エラー処理の詳細については、ファイル例外/エラーを参照してください。

そのキーまたは相対レコード番号が検索引数に等しいレコードが存在する場合にオン に設定される標識を 75-76 桁目に指定することができます。この情報は %EQUAL 組み込み関数からも入手することが できます。この関数は、等しい項目が見付かった場合に '1' を戻します。

75 から 76 桁目の標識または %EQUAL を指定して SETLL を使用する場合、指定されたキーとファイル内の実際のキーの比較は通常、データ管理機能により実行されます。 データ管理機能でこれを実行できない場合は、16 進数照合シーケンスを使用して比較が実行されます。 この場合、予想通りの結果が得られないことがあります。 詳しくは、WebSphere Development Studio: ILE RPG プログラマーの手引きのセクション『キー付きファイルの使用による予期しない結果』を参照してください。

名前 が下限に設定されているファイル名である場合、ファイルは、指定された検索引数 (検索引数) に等しいかそれより大きいキーまたは相対レコード番号の最初のレコードに位置付けられます。

名前 に下限に設定されているレコード様式名が入っている場合、ファイルは、指定された検索引数 (検索引数) に等しいかそれより大きいキーまたは相対レコード番号の指定されたタイプの最初のレコードに位置付けられます。

ファイルを位置付けるために形象定数を使用することもできます。

注:
以下の形象定数の説明および使用例では、*LOVAL および *HIVAL はファイ ルの実際のキーとしては使用されないものとしています。

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

*LOVAL または *HIVAL が日付または時刻データ・タイプのキー・フィール ドで使用される場合には、その値は使用される日付時刻の形式によって異なり ます。 これらの値の詳細については、データ・タイプおよびデータ形式を参照してください。

特殊値 *START および *END を 検索引数 として指定できます。 *START はファイルの始めに位置指定し、*END はファイルの終わりに位置指定します。どちらの位置付けも、キー付きファイルに使用される照合順序とは関係なく行なわれます。 検索引数 に *START または *END のいずれかを指定する場合には、次のことに注意してください。

図 350 (3/4) に、SETGT 命令 での形象定数の使用法を示します。形象定数は、SETLL 命令で も同様に使用されます。

SETLL 命令を使用する場合には、次のことに留意してください。

ヌル値可能フィールドおよびキーを持つレコードの処理については、データベースのヌル値サポートを参照してください。

詳細については、ファイル命令を参照してください。

注:
命令コード拡張 H、M、および R は、検索引数がリストまたは %KDS() である場合にのみ使用できます。

次の例では、ファイル ORDFIL に注文レコードが入っています。 キー・フィールドは注文番号 (ORDER) フィールドです。 それぞれの注文には複数のレコードがあります。 演算仕様書では、ORDFIL は次の ようになっています。

図 351. SETLL 命令
*...1....+....2....+....3....+....4....+....5....+....6....+....7...+....
CL0N01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiLoEq....
 *
 *  ORDFIL の中の 101 のレコードがすべて印刷されます。値 101 は前に
 *  ORDER に入れられています。SETLL 命令では、ファイルはキーの値が
 *  101 の最初のレコードに位置付けられ、
 *  %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 ループが終了します。