FORALL 语句 (PL/SQL)

FORALL 语句对数组的所有元素或数组中某个范围的元素执行数据更改语句。

调用

只能在 PL/SQL 块中指定此语句。

权限

此语句的授权标识所拥有的特权必须包括调用 FORALL 语句中指定的数据更改语句所需的所有特权。

语法

阅读语法图跳过直观语法图FORALLindex-variableINlower-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-bound 小于 upper-bound。范围表示从 lower-bound 开始每次递增 1 并直到 upper-bound 为止(包括上限)的每个整数值。
INDICES OF indexing-array
标识 indexing-array 所标识的数组的数组下标值集合。如果 indexing-array 是关联数组,那么数组下标值必须可指定给 index-variable 并且不能是稀疏集合。
VALUES OF indexing-array
标识 indexing-array 所标识的数组的元素值集合。元素值必须可指定给 index-variable,并且不能是无序稀疏集合。
INSERT 语句
指定要对每个 index-variable 值执行的 INSERT 语句。
搜索型 DELETE 语句
指定要对每个 index-variable 值执行的搜索型 DELETE 语句。
搜索型 UPDATE 语句
指定要对每个 index-variable 值执行的搜索型 UPDATE 语句。
EXECUTE IMMEDIATE 语句
指定要对每个 index-variable 值执行的 EXECUTE IMMEDIATE 语句。

  • 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);