개체 유형과 테이블이 해당 개체로 구성되어 있습니다. 그래서 여기에 우리가 간다 : 또한 일반적인 ETL principle에서 작동 PL/SQL 기능이있다반복의 가져 오기를 BULK COLLECT로 바꿉니다
create or replace type lpu.someobj_o as object
(
name VARCHAR2(75),
enroll_date DATE,
id NUMBER(12)
)
CREATE OR REPLACE TYPE lpu."SOMEOBJ_T" IS TABLE OF someobj_o;
. 다음은 코드 함수의 일부입니다.
for some_cursor_rec in some_cursor(startTime, recordInterval) loop
open some_cur2(some_cursor_rec.name, some_cursor_rec.id);
fetch some_cur2 into some_cursor_rec2;
if some_cur2%rowcount > 0 then
loop
pipe row (
lpu.someobj_o(
id => some_cursor_rec2.id,
name => some_cursor_rec2.name,
enroll_date => some_cursor_rec2.enroll_date
)
);
fetch some_cur2 into some_cursor_rec2;
exit when some_cur2%notfound;
end loop;
end if;
close some_cur2;
end loop;
좋습니다. 따라서 문제는 작은 성능입니다. 이 기능을 완료하는 속도를 어떻게 높일 수 있습니까? 나는 BULK COLLECT
이 성능을 향상시켜야한다고 읽었습니다. 하지만 내 경우에는 어떻게 사용할 수 있습니까? 나는 BULK COLLECT
을 시도했지만 컬렉션의 유형이 잘못되었다는 에러를주었습니다. 미리 감사드립니다. 정말 당신의 도움을 바랍니다!
'BULK COLLECT' 조항이있는'FETCH' 문? http://download.oracle.com/docs/cd/E11882_01/appdev.112/e17126/tuning.htm#BCGGAGIF –
파이프 라인 기능에서'대량 수집 (bulk collect) '사용의 이점에 대해 약간 회의적입니다. 한 번에 여러 행을로드하더라도 한 번에 한 행을 출력에만 파이프 할 수 있습니다. 그 문제에 관해서는, 함수에서 처리가 상당히 진행되지 않는 한, 왜 처음에는 파이프 라인 함수를 사용하고 있는지 질문해야합니다. – Allan
성능 향상을 위해 필요한 경우 파이프 라인 기능을 거부 할 수 있습니다. 나에게 그걸 권하는거야? – kseen