ROW PREFETCHING
PL/SQL 에서 프리 페칭
-- 커서를 이용한 FOR LOOP 문에서는 자동 프리페치(100 row)
BEGIN
FOR c IN (SELECT * FROM t)
LOOP
-- 데이터 처리
NULL;
END LOOP;
END;
-- 다른 유형의 커서에서는 bulk collect into 사용
DECLARE
TYPE t_t IS TABLE OF t%ROWTYPE;
l_t t_t;
BEGIN
SELECT * BULK COLLECT INTO l_t FROM t;
FOR i IN l_t.FIRST..l_t.LAST
LOOP
-- 데이터 처리
NULL;
END LOOP;
END;
/
DECLARE
CURSOR c IS SELECT * FROM t;
TYPE t_t IS TABLE OF t%ROWTYPE;
l_t t_t;
BEGIN
OPEN c;
LOOP
FETCH c BULK COLLECT INTO l_t LIMIT 100;
EXIT WHEN l_t.COUNT = 0;
FOR i IN l_t.FIRST..l_t.LAST
-- 데이터 처리
NULL;
END LOOP;
END LOOP;
CLOSE c;
END;
/
array interface
PL/SQL 에서 배열처리
DECLARE
TYPE t_id IS TABLE OF t.id%TYPE;
TYPE t_pad IS TABLE OF t.pad%TYPE;
l_id t_id := t_id();
l_pad t_pad := t_pad();
BEGIN
-- 데이터 준비
l_id.EXTEND(100000);
l_pad.EXTEND(100000);
FOR i IN 1..100000
LOOP
l_id(i) := i;
l_pad(i) := RPAD('*', 100, '*');
END LOOP;
-- 데이터 입력
FORALL i IN l_id.FIRST..l_id.LAST
INSERT INTO t VALUES (l_id(i), l_pad(i));
END;
-- FORALL 이 사용되었다는 것이 루프를 의미하지는 않는다
-- 단 한번의 호출로 모든 로우가 전달된다.
- 강좌 URL : http://www.gurubee.net/lecture/4402
- 구루비 강좌는 개인의 학습용으로만 사용 할 수 있으며, 다른 웹 페이지에 게재할 경우에는 출처를 꼭 밝혀 주시면 고맙겠습니다.~^^
- 구루비 강좌는 서비스 제공을 위한 목적이나, 학원 홍보, 수익을 얻기 위한 용도로 사용 할 수 없습니다.