BULK COLLECT INTO 子句 (PL/SQL)
在 INTO 关键字前带有可选的 BULK COLLECT 关键字的 SELECT INTO 语句将多行检索到一个数组中。
语法
描述
- 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;