使用bulk collected和forall的方式批量插入数据

来源:互联网 发布:java mysql jdbc 编辑:程序博客网 时间:2024/05/24 04:35

使用bulk collected和forall的方式批量插入数据

方式:

使用bulk collected批量抽取出数据,插入到目标表,对于百万级别的数据可能会影响到资源分配,这样可以降低缓解压力。

使用forall替代for loop,减少loop虚化花费的资源和时间。


示例如下:

create or replace procedure p2 is

 CURSOR emp_cur IS
      SELECT empno, ename, hiredate FROM emp;


   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
   OPEN emp_cur;


   LOOP
      FETCH emp_cur
      BULK   COLLECT INTO emp_tab
      LIMIT 10;                                                                                   -------------------一次取出多少条数据-----------------
 
      EXIT WHEN emp_tab.COUNT = 0; 


      FORALL i IN emp_tab.FIRST .. emp_tab.LAST
         insert into (select empno,ename,hiredate from t_emp) values emp_tab(i);
      commit;
   END LOOP;


   CLOSE emp_cur;
END;
原创粉丝点击