批量SQL之BULK COLLECT子句

本文详细介绍了Oracle中的BULK COLLECT子句,它用于批量检索结果,将结果集一次性绑定到集合变量。通过示例展示了BULK COLLECT在SELECT INTO、FETCH INTO、RETURNING INTO中的用法,以及如何使用LIMIT限制FETCH数据量,同时讨论了其与FORALL的综合运用及一些使用限制。
摘要由CSDN通过智能技术生成
批量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  
     
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值