ヘッダーをスキップ
Oracle Database PL/SQL言語リファレンス
11g リリース1(11.1)
E05670-03
  目次
目次
索引
索引

戻る
戻る
 
次へ
次へ
 

FORALL文

FORALL文は、一連の静的DML文または動的DML文を発行します。通常、FORループを使用する場合より高速に処理を実行できます。 この文には、いくつかの設定コードが必要です。これは、ループが繰り返されるたびに、VALUES句またはWHERE句内の1つ以上のコレクションの値が使用されるためです。

構文

forall_statement ::=

forall_statement
forall_statement.gifの説明

bounds_clause ::=

bounds_clause
bounds_clause.gifの説明

キーワードとパラメータの説明

INDICES OF collection_name

索引変数の値が指定したコレクション要素の添字に対応するように指定する句です。 この句を使用すると、いくつかの要素が削除されたネストした表、または数値の添字を持つ結合配列で、FORALLを使用できます。

BETWEEN lower_bound AND upper_bound

INDICES OF句の添字の範囲を制限します。 範囲内の添字がコレクションに存在しない場合、その添字はスキップされます。

VALUES OF index_collection_name

FORALL索引変数の添字に、index_collection_nameで指定した別のコレクションの要素の値が使用されるように指定する句です。 ここで使用する別のコレクションは、ポインタのセットとして機能します。index_collection_nameで指定する要素に応じて、FORALLは任意の順序で添字に対する反復処理を実行できます(同じ添字を複数回使用することもできます)。

索引コレクションは、ネストした表であるか、またはPLS_INTEGERBINARY_INTEGERによって索引付けされ、要素もPLS_INTEGERBINARY_INTEGERである結合配列である必要があります。 索引コレクションが空の場合、例外が呼び出され、FORALL文は実行されません。

index_name

コレクションの添字として、FORALL文の中でのみ参照できる、未宣言の識別子です。

index_nameの暗黙的な宣言は、ループの外側での宣言をオーバーライドします。 文の中では同じ名前の別の変数を参照できません。 FORALL文の中では、index_nameは式に使用したり値を代入できません。

lower_bound .. upper_bound

連続した索引番号の有効範囲を指定する数式です。 必要に応じて、PL/SQLはこれらの番号を最も近い整数に四捨五入します。 SQLエンジンは、範囲内の各索引番号に対して一度ずつSQL文を実行します。 この式は、FORALL文を入力すると、一度評価されます。

SAVE EXCEPTIONS

一部のDML操作が失敗してもFORALLループを継続させるオプションのキーワードです。 プログラムでは、例外をただちに呼び出すのではなく、FORALL文の終了後に例外を1つ呼び出します。 エラーの詳細は、SQL%BULK_EXCEPTIONSでループの後に取得できます。 プログラムでは、発生するたびに例外を個別に処理するのではなく、FORALLループの後ですべてのエラーをレポートまたはクリーンアップできます。 「FORALL例外の処理(%BULK_EXCEPTIONS属性)」を参照してください。

sql_statement

VALUES句またはWHERE句内のコレクション要素を参照するUPDATEまたはDELETEなどの静的DML文、あるいは動的(EXECUTE IMMEDIATE)DML文です。

使用上の注意

SQL文は複数のコレクションを参照できますが、パフォーマンス上のメリットは、添字付きコレクションにのみ適用されます。

FORALL文が失敗すると、データベースの変更は、各SQL文の実行の前にマークされた暗黙的なセーブポイントまでロールバックされます。 前回のFORALLループの反復中に行われた変更はロールバックされません。

制限

FORALL文には、次の制限が適用されます。

関連トピック