BULK COLLECT INTO 子句 (PL/SQL)

在 INTO 关键字前带有可选的 BULK COLLECT 关键字的 SELECT INTO 语句将多行检索到一个数组中。

语法

阅读语法图跳过直观语法图BULK COLLECT INTO ,数组变量 LIMIT表达式

描述

BULK COLLECT INTO 数组变量
标识一个或多个具有数组数据类型的变量。结果的每一行都按结果集的顺序被指定给每个数组中的元素,并按顺序指定数组下标。
  • 如果只指定了一个 数组变量
    • 如果 数组变量 元素的数据类型不是记录类型,那么 SELECT 列表必须正好包含一列,并且该列的数据类型必须可指定给数组元素数据类型。
    • 如果 数组变量 元素的数据类型是记录类型,那么 SELECT 列表必须可指定给记录类型。
  • 如果指定了多个数组变量:
    • 数组变量 元素的数据类型不能是记录类型。
    • 对于 SELECT 列表中的每一列,都必须存在一个 数组变量
    • SELECT 列表中每一列的数据类型都必须可指定给相应 数组变量 的数组元素数据类型。
如果 数组变量 的数据类型是普通数组,那么最大基数必须大于或等于查询所返回的行数。
LIMIT 表达式
对要访存的行数提供上限。该表达式可以是数字文字、变量或复杂表达式,但是它不能依赖于 SELECT 语句中的任何列。

  • FETCH 语句和 EXECUTE IMMEDIATE 语句还支持 BULK COLLECT INTO 子句的变体。

示例

以下示例演示一个使用 BULK COLLECT INTO 子句从过程返回行数组的过程。此过程以及数组的类型在程序包中定义。
CREATE OR REPLACE PACAKGE bci_sample
IS
 TYPE emps_array IS VARRAY (30) OF VARCHAR2(6);

 PROCEDURE get_dept_empno (
  dno       IN   emp.deptno%TYPE,
  emps_dno  OUT  emps_array
  );
END bci_sample;

CREATE OR REPLACE PACKAGE BODY bci_sample
IS
 PROCEDURE get_dept_empno (
  dno       IN   emp.deptno%TYPE,
  emps_dno  OUT  emps_array
  )
 IS
  BEGIN      
   SELECT empno BULK COLLECT INTO emps_dno
    FROM emp
    WHERE deptno=dno;
  END get_dept_empno;
END bci_sample;