FORALL ステートメント (PL/SQL)

FORALL ステートメントでは、配列のすべての要素または配列の要素の範囲に対して、データ変更ステートメントを実行します。

呼び出し方法

このステートメントは、PL/SQL ブロック内のみで指定できます。

許可

ステートメントの許可 ID によって保持される特権には、FORALL ステートメントで指定されるデータ変更ステートメントの呼び出しに必要なすべての特権が含まれていなければなりません。

構文

構文図を読む構文図をスキップするFORALLindex-variableIN lower-bound..upper-boundINDICES OFindexing-arrayVALUES OFindexing-arrayinsert-statementsearched-delete-statementsearched-update-statementexecute-immediate-statement

説明

index-variable
添字として使用される名前を識別します。 これは、INTEGER として暗黙的に宣言され、FORALL ステートメントで参照のみ可能です。
lower-bound .. upper-bound
index-variable に割り当て可能な索引値の範囲を識別します。lower-boundupper-bound より小さくなります。 この範囲は、lower-bound から 1 刻みで増分した upper-bound まで (upper-bound も含む) のすべての整数値を表します。
INDICES OF indexing-array
indexing-array によって示される配列の添字値を識別します。 indexing-array が連想配列の場合、添字値は index-variable に割り当て可能でなければなりませんが、疎の集合であっても構いません。
VALUES OF indexing-array
indexing-array によって示される配列の一連のエレメント値を識別します。 エレメント値は index-variable に割り当て可能でなければなりませんが、順序付けられていない疎の集合であっても構いません。
insert-statement
それぞれの index-variable の値に対して効率的に実行する INSERT ステートメントを 1 つ指定します。
searched-delete-statement
それぞれの index-variable の値に対して効率的に実行する探索済み DELETE ステートメントを 1 つ指定します。
searched-update-statement
それぞれの index-variable の値に対して効率的に実行する探索済み UPDATE ステートメントを 1 つ指定します。
execute-immediate-statement
それぞれの index-variable の値に対して効率的に実行する EXECUTE IMMEDIATE ステートメントを 1 つ指定します。

  • FORALL ステートメント処理は、アトミックではありません。 FORALL ステートメントで反復処理が行われている間にエラーが発生した場合、既に処理されたどんなデータ変更操作も暗黙的にはロールバックされません。 FORALL ステートメントでエラーが発生した時には、アプリケーションで ROLLBACK ステートメントを使用し、トランザクション全体をロールバックすることができます。

以下は、基本的な FORALL ステートメントの例です。
FORALL x 
  IN in_customer_list.FIRST..in_customer_list.LAST
  DELETE FROM customer 
    WHERE cust_id IN in_customer_list(x);