自由形式構文 | CHAIN{(ENHMR)} 検索引数 名前 {データ構造} |
コード | 演算項目 1 | 演算項目 2 | 結果フィールド | 標識 | ||
---|---|---|---|---|---|---|
CHAIN (E N) | 検索引数 | 名前 (ファイルまたはレコード様式) | データ構造 | NR | ER | _ |
CHAIN 命令は、全手順ファイル (ファイル仕様書の 18 桁目に F) から レコードを検索し、レコード識別標識を オンに設定 (入力仕様書に指定された場合) して、 レコードのデータを入力 フィールドに入れます。
検索引数 (検索引数) は、レコードの検索に使用するキーまたは相対レコード番号でなければなりません。アクセスがキーによる場 合には、検索引数 はフィールド名、名前の付いた定数、形象定数、またはリテラルの形式の単一キーにすることができます。
ファイルが外部記述ファイルの場合、検索引数 は KLIST 名、値のリスト、または %KDS の形式の複合キーにすることもできます。図形および UCS-2 のキー・フィールド には、そのファイル内のキーと同じ CCSID がなければなりません。 %KDS の例については、%KDS (データ構造の検索引数)の終わりにある例を参照してください。 アクセスが相対レコード番号による場合には、検索引数 に整数のリテラルまたは小数点以下の桁数がゼロの数値フィールドを入れなけ ればなりません。
名前 オペランドには、読み取るファイルまたはレコード様式の名前を指定します。レコード様式名を使用できるのは、外部記述ファイルの場合だけのみです。ファイル名が 名前 に指定されていてアクセスがキーによる場合には、CHAIN 命令によって検索引数と一致する最初のレコードが検索されます。
名前 がレコード様式名でアクセスがキーによる場合には、CHAIN 命令によってそのキーが検索引数と一致する指定されたレコード・タイプの最初のレコードが検索されます。検索引数と一致する指定されたレコード・タイプの レコードが見付からない場合には、該当レコードなしの状況になります。
データ構造 オペランドが指定されている場合、レコードはデータ構造に直接読み込まれます。 名前 がプログラム記述ファイル (ファイル記述仕様書の 22 桁目の F によって識別される) を参照する場合、 データ構造は宣言されているファイルのレコード長と同じ長さのデータ構造にすることができます。 名前 が外部記述ファイルまたは外部記述ファイルのレコード様式 を参照する場合、データ構造は EXTNAME(...:*INPUT) または LIKEREC(...:*INPUT) で定義されているデータ構造にする 必要があります。 データ構造の定義方法、およびファイルとデータ 構造の間でどのようにデータが転送されるかについては、ファイル命令を参照してください。
ワークステーション・ファイルの場合には、CHAIN 命令によってサブファイル・レコードが 検索されます。
複数装置ファイルの場合には、名前 オペランドにレコード様式を指定しなければなりません。データは、DEVID(フィールド名)装置ファイルのファイル仕様書の キーワードに指定されたフィールド名で識別されるプログラム装置から読み取られます。 このキーワードが指定されていない場合には、データは、ファイルに対して最 後に正常な入力操作が行われた装置から読み取られます。
ファイルが入力 DISK ファイルとして指定されている場合には、すべての レコードはロックなしで読み取られ、そのために命令拡張を指定する ことはできません。 ファイルが更新として指定されている場合には、命令拡張 N が指定されていな ければ、すべてのレコードがロックされます。
更新ディスク・ファイルから読み取っている場合には、命令拡張 N を指定して 読み取り時にレコードをロックしないように (例えば、CHAIN (N)) 指示するこ とができます。 詳細については、「WebSphere Development Studio: ILE RPG プログラマーの手引き」を参照してください。
ファイルに検索引数と一致するレコードがない場合にオンに設定される標識 を 71 から 72 桁目に指定することができます。 この情報は %FOUND 組み込み関数 からも入手することができます。この関数は、レコードが見付からない場合は '0' を 戻し、レコードが見付かった場合は '1' を戻します。
CHAIN 例外 (ファイル状況コードが 1000 より大きい) を 処理するために、命令コード拡張 'E' またはエラー標識 ER を指定できますが、 両方を指定することはできません。 エラー処理の詳細については、ファイル例外/エラーを参照してください。
75 桁目と 76 桁目はブランクでなければなりません。
CHAIN 命令が正常に実行された場合には、名前 に指定されたファイルは、以後の読み取り操作で論理的に検索済みレコードの後または前にあるレコードが検索されるように位置付けられます。CHAIN 命令が正常に完了しなかった場合 (例えば、エラーが起こったりレコードが見付からなかった場合) には、名前 に指定されたファイルは、そのファイルに対しての次の読み取り操作が実行される前に (例えば、CHAIN または SETLL 命令によって) 再度位置決めされなければなりません。
名前 に指定されたファイルに、そのファイルへの CHAIN 命令が正常に実行された直後に (演算仕様書または出力仕様書で) 更新が実行されると、最後に検索されたレコードが更新されます。
ヌル値可能フィールドおよびキーを持つレコードの処理については、データベースのヌル値サポートを参照してください。
詳細については、ファイル命令を参照してください。
*..1....+....2....+....3....+....4....+....5....+....6....+....7...+.... * * CHAIN 命令は、ファイル * FILEX から、キー・フィールドが検索引数 * KEY (演算項目 1) と同じ値の最初のレコードを検索します。 /FREE CHAIN KEY FILEX; // キー値が検索引数と等しいレコードが見付からない場合、 // %FOUND は '0' を戻し、EXSR 命令が処理されます。 // キー値が検索引数と等しいレコードが見付かった場合、 // プログラムは、 // EXSR 命令の後の演算から続行します。 IF NOT %FOUND; EXSR Not_Found; ENDIF; /END-FREE
FFilename++IPEASF.....L.....A.Device+.Keywords+++++++++++++++++++++++++ FCUSTFILE IF E K DISK /free // 検索キーを直接リスト内で指定します chain ('abc' : 'AB') custrec; // キーのリストで式を使用することができます chain (%xlate(custname : LO : UP) : companyCode + partCode) custrec; return;
FFilename++IPEASF.....L.....A.Device+.Keywords+++++++++++++++++++++++++ FCUSTFILE IF E K DISK DName+++++++++++ETDsFrom+++To/L+++IDc.Keywords+++++++++++++++++++++++++ D custRecDs ds likerec(custRec) /free // レコードを直接データ構造に読み込みます chain ('abc' : 'AB') custRec custRecDs; // データ構造フィールドを使用します if (custRecDs.code = *BLANKS); custRecDs.code = getCompanyCode (custRecDs); update custRec custRecDs; endif;
(C) Copyright IBM Corporation 1992, 2006. All Rights Reserved.