PLSQL BULK COLLECT INTO 실습, SELECT, FETCH에서 BULK COLLECT INTO 사용하기, 오라클교육, SQL교육, JAVA교육, 오라클학원, SQL학원, 자바학원, 오라클동영상

https://www.youtube.com/watch?v=RE79vqW_s6o&list=PLxU-iZCqT52CfP98Y4gCDKIm52tKvgy36&index=31

https://www.youtube.com/watch?v=mAQNkUZ_9CA&list=PLxU-iZCqT52CfP98Y4gCDKIm52tKvgy36&index=30

SELECT, FETCH에서
BULK COLLECT INTO 사용하기
[BULK COLLECT INTO]
SELECT에서 BULK COLLECT INTO를 이용하면 여러건의 레코드를 한번에 읽어들여 속도를 향상 시킬 수 있으며, 커서에서도 FETCH를 하는 경우에도 한건씩 꺼내는것 보다 한번에 꺼낸다면 속도 향상에 도움이 될 수 있습니다. 물론 이 경우 읽어들이는 데이터에 따른 메모리 사용량은 고려 되어야 합니다.
BULK COLLECT INTO 다음에는 여러 레코드를 한번에 담을 수 있는 데이터 타입이 와야 하는데 PL/SQL의 TABLE 타입(일차원 배열)을 사용합니다.
다음과 같은 경우에 사용 가능 합니다.
SELECT 컬럼리스트 BULK COLLECT INTO 컬렉션
FETCH 커서명 BULK COLLECT INTO 컬렉션
EXECUTE IMMEDIATE 쿼리문자열 BULK COLLECT INTO 컬렉션
[실습]
set timing on select * from myemp1; -- 일반적인 FOR LOOP 커서 사용 declare cursor emp_cur is select * from myemp1 where rownum < 400000; tot number := 0; emp_r myemp1%rowtype; begin open emp_cur; loop fetch emp_cur into emp_r; exit when emp_cur%notfound; tot := tot + emp_r.sal; end loop; dbms_output.put_line('tot : ' || tot); close emp_cur; exception when others then dbms_output.put_line(sqlerrm(sqlcode)); end; -- SELECT절에서 BULK COLLECT INTO 사용하기 declare type emp_r_array is table of myemp1%rowtype; emp_table emp_r_array; tot number := 0; begin select * bulk collect into emp_table from myemp1 where rownum < 400000; DBMS_OUTPUT.PUT_LINE('SQL%ROWCOUNT : ' || SQL%ROWCOUNT); for i in emp_table.first..emp_table.last loop tot := tot + emp_table(i).sal; end loop; dbms_output.put_line('tot : ' || tot); exception when others then dbms_output.put_line(sqlerrm(sqlcode)); end; -- FETCH에서 BULK COLLECT INFO 사용하기 create or replace procedure getEmp3 is type empcurtype is ref cursor; type empnolist is table of myemp1.empno%type; type enamelist is table of myemp1.ename%type; emp_cur empcurtype; empnos empnolist; enames enamelist; begin open emp_cur for 'select empno, ename from myemp1 where rownum < 1000'; fetch emp_cur bulk collect into empnos, enames; for i in enames.first..enames.last loop dbms_output.put_line(enames(i)); end loop; close emp_cur; end; / exec getEmp3; |
#PLSQL #BULKCOLLECTINTO , #오라클커거, #forall, #오라클교육, #SQL교육, #JAVA교육, #오라클학원, #SQL학원, #자바학원, #오라클동영상, PLSQL BULKCOLLECTINTO , 오라클커거, forall, 오라클교육, SQL교육, JAVA교육, 오라클학원, SQL학원, 자바학원, 오라클동영상,