7.47.1 FETCHのパラメータ

LANSA

7.47.1 FETCHのパラメータ


FIELDS

FROM_FILE

IO_ERROR

IO_STATUS

ISSUE_MSG

KEEP_LAST

LOCK

NOT_FOUND

RETURN_RRN

VAL_ERROR

WHERE

WITH_KEY

WITH_RRN

FIELDS

ファイルから取得するフィールド、または取得するフィールドを指定するグループの名前を指定します。または、このパラメータに拡張可能なグループ式を入力することもできます。詳細については、「拡張可能グループ」を参照してください。

以下の特別な値を指定できます。

·         *ALLを指定した場合、現在アクティブなファイルのすべてのフィールドが取得されます。

·         *ALL_REALを指定した場合、現在アクティブなファイルのすべての実フィールドが取得されます。

·         *ALL_VIRTを指定した場合、現在アクティブなファイルのすべての仮想フィールドが取得されます。

·         *EXCLUDINGを指定した場合、この特別な値に続けて指定するフィールドがフィールド・リストから除外されます。

·         *INCLUDINGを指定した場合、この特別な値に続けて指定するフィールドがフィールド・リストに含められます。この特殊な値は、*EXCLUDINGエントリーによって、フィールド・リストが除外モードに移行した後にのみ必要です。

注:OTHERによって保守されている論理ファイルからすべてのフィールドを取得すると、基になっている物理ファイルのすべてのフィールドがフィールド・リストに含められます。

特別な値*ALL、*ALL_REALまたは*ALL_VIRTは、必要な場合にのみ慎重に使用することを強くお勧めします。必要のないフィールドを取得すると、ファンクションによって不要にフィールドの取得とマッピングが行われます。また、クロスリファレンスの詳細(ファンクション内で使用されていないフィールドを示す)が無効になり、ファンクションのCRUDE項目の複雑度が無意味に高くなります。

BLOBまたはCLOBデータを取得すると、*SQLNULLまたはファイル名になることに注意してください。ファイル名の場合、データベース・ファイルのデータがそのファイルにコピーされています。

警告:ファイルからBLOBまたはCLOBフィールドを取得する操作には時間がかかります。

BLOBおよびCLOBフィールドを使用する場合に推奨されるデータベース設計

BLOBとCLOBフィールドを使用する場合に、それらのフィールドを他のフィールドとは別のファイルに配置してメイン・ファイルと同じキーを使用する設計をお勧めします。これによりプログラマは、BLOBやCLOBデータのアクセスに別々のI/O操作を行わなければならなくなり、このデータの無差別な使用によるデータベース・パフォーマンス上の影響を軽減することができます。またこれは最も移植性の高い設計で、BLOB以外またはCLOB以外のデータに常に迅速にアクセスできるようになります。

FROM_FILE

「I/Oコマンドでのファイル名の指定」を参照してください。

WHERE

「条件および式の指定」および「I/OコマンドでのWHEREパラメータの指定」を参照してください。

FETCHでWHERE条件を使用し、その条件によってレコードが見つからなかった場合、フィールドの内容は予測できません。

WITH_KEY

「I/Oコマンドでのファイル・キー・リストの指定」を参照してください。

IO_STATUS

I/O操作の結果の「戻りコード」を受け取るフィールドの名前を指定します。

デフォルト値*STATUSを指定すると、戻りコードは、#IO$STSという特別なフィールドに保管されます。このフィールドは、他のフィールドと同様にRDMLプログラムで参照できます。

戻りコードを受け取るフィールドとしてユーザー・フィールドを指定する場合、このフィールドは、長さ2文字の英数字フィールドである必要があります。ユーザー・フィールドを指定した場合も、特別なフィールド#IO$STSは更新されます。

I/O操作の戻りコード値の詳細については、「RDML I/O戻りコード」を参照してください。

IO_ERROR

このコマンドの実行時にI/Oエラーが発生した場合に実行するアクションを指定します。

I/Oエラーは「致命的」エラーと見なされ、ファイルが見つからなかった、ファイルが壊れている、ファイルを割り当てることができない、などがこれに該当します。これらのタイプのエラーが発生すると、ファンクションにおいて、そのファイルが関与しているすべての処理が停止します。

デフォルト値*ABORTを指定すると、ファンクションが異常終了し、I/Oエラーの性質を示すエラー・メッセージが発行されます。

*NEXTを指定すると、制御が次のコマンドに渡されます。

*RETURNを指定すると、プログラム・メインラインでは制御が呼び出し元に戻され、サブルーチンでは制御が呼び出し元ルーチンまたはプログラム・メインラインに戻されます。

上記の値をどれも使用しない場合は、制御を渡す先の有効なコマンド・ラベルを指定してください。

VAL_ERROR

このコマンドで妥当性検査エラーが検出された場合に実行するアクションを指定します。

妥当性検査エラーは、ファイルに対して追加、更新または削除を行う情報が、そのファイル内のフィールドに関連付けられたFILEまたはDICTIONARYレベルの妥当性検査に合格しなかった場合に発生します。

デフォルト値*LASTDISを指定すると、直前の表示画面に制御が戻されます。この画面では、関連付けられた妥当性検査に失敗したフィールドが反転表示され、エラーのある最初のフィールドにカーソルが配置されます。

*NEXTを指定すると、制御が次のコマンドに渡されます。

*RETURNを指定すると、プログラム・メインラインでは制御が呼び出し元に戻され、サブルーチンでは制御が呼び出し元ルーチンまたはプログラム・メインラインに戻されます。

上記の値をどれも使用しない場合は、制御を渡す先の有効なコマンド・ラベルを指定してください。

*LASTDISは、「直前の表示画面」がない場合(バッチ・ファンクション内など)でも有効です。この場合、ファンクションが異常終了し、該当するエラー・メッセージが発行されます。

*LASTDISを使用する場合、「直前の表示画面」は、データベース・コマンド(INSERT、UPDATE、DELETE、FETCHおよびSELECT)と同じレベルでなければなりません。データベース・コマンドがSUBROUTINE内で指定され、「直前の表示画面」が呼び出し元ルーチンまたはメインラインの場合など、レベルが異なるとこのファンクションは異常終了し、該当するエラー・メッセージが発行されます。

これは、Visual LANSAでイベント・ルーチンとメソッド・ルーチンを使用する場合には当てはまりません。これらの場合、制御は呼び出しルーチンに戻されます。フィールドには、エラーがあることと、フォームの親階層で見つかった最初のステータス・パーに返されたメッセージが表示されます。または、メッセージがない場合は、実行スタック内で見つかったステータス・バーを持つ最初のフォーム(PRIM_OBJTから継承した再利用可能パーツなど)が表示されます。

NOT_FOUND

WITH_KEYパラメータで指定されたキーと一致するキーを持つレコードがファイルで見つからなかった場合に実行する処理を指定します。

*NEXTを指定すると、制御が次のコマンドに渡されます。

*RETURNを指定すると、プログラム・メインラインでは制御が呼び出し元に戻され、サブルーチンでは制御が呼び出し元ルーチンまたはプログラム・メインラインに戻されます。

上記の値をどれも使用しない場合は、制御を渡す先の有効なコマンド・ラベルを指定してください。

ISSUE_MSG

「見つからない」メッセージを自動的に発行するかどうかを指定します。

デフォルト値*NOを指定すると、メッセージは発行されません。

*NO以外に指定できる値は*YESのみです。この値を指定すると、メッセージが自動的に発行されます。メッセージは、ユーザーに表示される次の画面形式の22/24行目またはバッチ・ジョブのジョブ・ログに表示されます。

LOCK

レコードを読み取る際に、そのレコードをロックするかどうかを指定します。

デフォルト値*NOを指定した場合、レコードはロックされません。

*YESを指定した場合は、レコードがロックされます。ロックしたレコードは、後でユーザーの責任により解放してください。

注:LOCK(*YES)は、レコード・レベルのロックを実行します。これにより、オペレーティング・システム内およびオペレーティング・システム間の動作(コミット制御による複数レコードのロック、デフォルトの待機時間など)が変化する可能性があります。そのため、LOCK_OBJECT組み込み関数を使用して、適切かつ完全な「ユーザー・オブジェクト」のロック・プロトコルを開発することをお勧めします。

移植性に関する考慮事項

可搬性のあるアプリケーションではサポートされないため、使用しないでください。Visual LANSAで使用すると、ビルド警告が生成されます。

WITH_RRN

取得するレコードの相対レコード番号(相対レコード・ファイル処理のための番号)を保持するフィールドの名前を指定します。WITH_KEYまたはWHEREパラメータを使用している場合、WITH_RRNパラメータは使用できません。

このパラメータで指定するフィールドは数値タイプで、このファンクションまたはLANSAデータ・ディクショナリで定義されていなければなりません。

注:FETCH、DELETEまたはUPDATEコマンドに対してWITH_RRNパラメータを使用すると、他の形式のデータベース・アクセスよりもレコードの取得、削除または更新を高速に行うことができます。

WITH_RRNパラメータを使用する場合、実際にアクセス対象となるデータベース・ファイルとして論理ファイルを使用することはできません。

詳細については、『Visual LANSA 開発者ガイド』「外部ファイルの読み込み」も参照してください。

RETURN_RRN

取得されたレコードの相対レコード番号を返す先のフィールドの名前を指定します。

このパラメータで指定するフィールドは数値タイプで、このファンクションまたはLANSAデータ・ディクショナリで定義されていなければなりません。

詳細については、『Visual LANSA 開発者ガイド』「外部ファイルの読み込み」を参照してください。

KEEP_LAST

最近実行した"n"回のFETCH操作の詳細をコンパイル済みRDMLプログラム内に保管するように指定します。FETCHコマンドが実行されるたびに、まず、最近実行された"n"回のFETCH操作の詳細が検索されます。プログラム内で必要な詳細が見つかった場合、実際にはデータベースI/O操作は行われません。これにより、RDMLプログラムのパフォーマンスを大幅に高めることができます。

デフォルト値*NONEを指定した場合、以前のFETCH操作の詳細は保管されません。FETCHが実行されるたびに、関連付けられたデータベース・ファイルに対してI/Oが行われます。

1〜9999の整数を指定できます。ここで指定する数値の回数分だけ、最近実行されたFETCH操作の詳細が保管されます。指定する数値には、妥当に予期できるFETCH操作の最大回数を反映させます。

例えば、会社数が15社のみのときに、(会社番号のキーによって)会社ファイルに対してFETCHを実行して会社名を取得する場合は、値15が適切でしょう。500を指定すると、実行中のRDMLプログラムの記憶域が無駄になり、実際にパフォーマンスが低下する可能性があります。

指定する数値は、実行可能なFETCH操作の回数を制限するものではないことに注意してください。RDMLプログラム内にFETCHの詳細を保管するための容量がなくなると、FETCHの詳細が最も古いものから上書きされます。

KEEP_LASTパラメータを指定する場合は、WITH_KEYパラメータを指定し、WHEREパラメータは指定しないでください。

また、以前のFETCHの詳細はRDMLプログラム内に保管されるため、実際にデータベース・ファイルの詳細に対して行った変更がRDMLプログラムに反映されているとは限りません。