批量SQL之BULK COLLECT子句
转自:http://blog.csdn.net/leshami/article/details/7545597
BULK COLLECT 子句会批量检索结果,即一次性将结果集绑定到一个集合变量中,并从SQL引擎发送到PL/SQL引擎。
通常可以在SELECT INTO、FETCH INTO以及RETURNING INTO子句中使用BULK COLLECT。
本文将逐一描述BULK COLLECT在这几种情形下的用法。
一、BULK COLLECT批量绑定的示例
--下面的示例中使用了BULK COLLECT将得到的结果集绑定到记录变量中
DECLARE
TYPE emp_rec_type IS RECORD
--声明记录类型
(
empno
emp.empno%TYPE
,ename
emp.ename%TYPE
,hiredate
emp.hiredate%TYPE
);
TYPE nested_emp_type IS TABLE OF emp_rec_type;
--声明记录类型变量
emp_tab
nested_emp_type;
BEGIN
SELECT empno, ename, hiredate
BULK COLLECT INTO emp_tab
--使用BULK COLLECT 将所得的结果集一次性绑定到记录变量emp_tab中
FROM emp;
FOR i IN emp_tab.FIRST .. emp_tab.LAST
LOOP
DBMS_OUTPUT.put_line('Current record is '||emp_tab(i).empno||chr(9)||emp_tab(i).ename||chr(9)||emp_tab(i).hiredate);
END LOOP;
END;
--上面的例子可以通过FOR 循环和普通的SELECT INTO来实现,那两者之间的差异呢?
--差异是FOR循环的SELECT INTO逐行提取并绑定到记录变量,而BULK COLLECT则一次即可提取所有行并绑定到记录变量。即谓批量绑定。
二、使用LIMIT限制FETCH数据量
在使用BULK COLLECT子句时,对于集合类型,如嵌套表,联合数组等会自动对其进行初始化以及扩展(如下示例)。
因此如果使用BULK COLLECT子句操作集合,则无需对集合进行初始化以及扩展。
由于BULK COLLECT的批量特性,如果数据量较大,而集合在此时又自动扩展,为避免过大的数据集造成性能下降,因此使用limit子句来限制一次提取的数据量。
limit子句只允许出现在fetch操作语句的批量中。
用法:
FETCH ... BULK COLLECT INTO ... [LIMIT rows]
DECLARE
CURSOR emp_cur IS
转自:http://blog.csdn.net/leshami/article/details/7545597
BULK COLLECT 子句会批量检索结果,即一次性将结果集绑定到一个集合变量中,并从SQL引擎发送到PL/SQL引擎。
通常可以在SELECT INTO、FETCH INTO以及RETURNING INTO子句中使用BULK COLLECT。
本文将逐一描述BULK COLLECT在这几种情形下的用法。
一、BULK COLLECT批量绑定的示例
--下面的示例中使用了BULK COLLECT将得到的结果集绑定到记录变量中
DECLARE
BEGIN
END;
--上面的例子可以通过FOR 循环和普通的SELECT INTO来实现,那两者之间的差异呢?
--差异是FOR循环的SELECT INTO逐行提取并绑定到记录变量,而BULK COLLECT则一次即可提取所有行并绑定到记录变量。即谓批量绑定。
二、使用LIMIT限制FETCH数据量
在使用BULK COLLECT子句时,对于集合类型,如嵌套表,联合数组等会自动对其进行初始化以及扩展(如下示例)。
因此如果使用BULK COLLECT子句操作集合,则无需对集合进行初始化以及扩展。
由于BULK COLLECT的批量特性,如果数据量较大,而集合在此时又自动扩展,为避免过大的数据集造成性能下降,因此使用limit子句来限制一次提取的数据量。
limit子句只允许出现在fetch操作语句的批量中。
用法:
DECLARE