FETCH
文は、複数行の問合せの結果セットから、行データを取り出します。 一度に1行、複数の行、またはすべての行をフェッチできます。 データは問合せが選択した列に対応する変数またはフィールドに格納されます。
構文
fetch_statement ::=
into_clause ::=
bulk_collect_into_clause ::=
キーワードとパラメータの説明
コレクションをPL/SQLエンジンに戻す前にバルク・バインド出力するように、SQLエンジンに指示します。 SQLエンジンは、INTO
リスト内で参照されるすべてのコレクションをバルク・バインドします。
collection_name
バルク・フェッチした列値を格納するための、宣言されたコレクションの名前。 問合せselect_item
ごとに、リストの中に、対応する型互換のコレクションが存在している必要があります。
cursor_name
現行の有効範囲の中で宣言されている明示カーソルを識別します。
cursor_variable_name
現行の有効範囲の中で宣言されているPL/SQLカーソル変数(またはパラメータ)を識別します。
host_array_name
バルク・フェッチした列値を格納するための配列を識別します。この配列は、PL/SQLホスト環境で宣言され、バインド引数としてPL/SQLに渡されます。 問合せselect_item
ごとに、リストの中に、対応する型互換の配列が存在している必要があります。
host_cursor_variable_name
PL/SQLホスト環境で宣言され、バインド引数としてPL/SQLに渡されるカーソル変数を識別します。 ホスト・カーソル変数のデータ型は、PL/SQLカーソル変数の戻り型と互換性があります。
バルク(スカラーではない)FETCH
文の中でのみ許されるオプションの句です。結果セット全体ではなく、一度にいくつかの行をバルク・フェッチします。
record_name
フェッチした行の値を格納する、ユーザー定義のレコードまたは%ROWTYPE
レコードを識別します。 カーソルまたはカーソル変数に関連付けられた問合せが戻す列の値に対して、レコードの中に、対応する型互換のフィールドが存在している必要があります。
variable_name
フェッチした列値を格納するための変数を識別します。 カーソルまたはカーソル変数に関連付けられた問合せが戻す列の値に対して、リストの中に、対応する型互換の変数が存在している必要があります。
使用上の注意
複数行の問合せを処理するには、カーソルFOR
ループかFETCH
文を使用します。
問合せのWHERE
句に含まれる変数は、カーソルまたはカーソル変数がオープンされたときにのみ評価されます。 結果セットや問合せの中の変数の値を変更するには、カーソルまたはカーソル変数を、新しい値に設定して再オープンする必要があります。
カーソルを再オープンするには、まずクローズしてください。 ただし、カーソル変数を再オープンする場合には、その前にクローズする必要はありません。
同じカーソルまたはカーソル変数を使用した別のフェッチで、異なるINTO
リストを使用できます。 個のFETCH文で別の行を取り出し、ターゲット変数に値を代入します。
結果セットの中に行が残っていない状態でFETCH
文を実行すると、ターゲット・フィールドの値またはターゲット変数の値は予測不能となり、%NOTFOUND
属性はTRUE
を戻します。
PL/SQLでは、カーソル変数の戻り型が、必ずFETCH
文のINTO
句と互換性を持ちます。 カーソル変数に関連付けられた問合せが戻す列の値に対して、INTO
句の中に、対応する、型互換性のあるフィールドまたは変数が存在している必要があります。 また、フィールドまたは変数の数は、列の値の数と一致する必要があります。
カーソル変数を、そのカーソル変数からフェッチするサブプログラムの仮パラメータとして宣言する場合は、IN
またはIN
OUT
モードを指定する必要があります。 ただし、サブプログラムがカーソル変数もオープンする場合は、IN
OUT
モードを指定する必要があります。
一連のFETCH
文では取り出すデータが常に不足するため、FETCH
がデータを戻さない場合でも例外は呼び出されません。 この状態を検出するには、カーソル属性%FOUND
または%NOTFOUND
を使用する必要があります。
クローズしている、または一度もオープンされていないカーソルまたはカーソル変数からフェッチを実行すると、PL/SQLによって事前定義の例外INVALID_CURSOR
が呼び出されます。
BULK COLLECT INTOの制限
BULK
COLLECT
INTO
句には、次の制限が適用されます。
キーが文字列型の結合配列に対してはBULK COLLECTを使用できません。
BULK
COLLECT
INTO
句はサーバー側(クライアント側ではなく)のプログラムの中でのみ使用できます。 それ以外の場合は、次のエラーが発生します。
this feature is not supported in client-side programs
BULK
COLLECT
INTO
句に示されるすべてのターゲット変数は、コレクションである必要があります。
コンポジット・ターゲット(オブジェクトなど)をRETURNING
INTO
句で使用することはできません。 それ以外の場合は、次のエラーが発生します。
error unsupported feature with RETURNING clause
暗黙的なデータ型変換が必要な場合、複数のコンポジット・ターゲットをBULK
COLLECT
INTO
句で使用することはできません。
暗黙的なデータ型変換が必要な場合、コンポジット・ターゲットのコレクション(オブジェクトのコレクションなど)をBULK
COLLECT
INTO
句で使用することはできません。
関連トピック