使用bulk collected和forall的方式批量插入数据
方式:
使用bulk collected批量抽取出数据,插入到目标表,对于百万级别的数据可能会影响到资源分配,这样可以降低缓解压力。
使用forall替代for loop,减少loop虚化花费的资源和时间。
示例如下:
create or replace procedure p2 is
CURSOR emp_cur ISSELECT 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;