【发布时间】:2011-11-28 04:07:54
【问题描述】:
有一个对象类型,表由该对象组成。 所以我们开始:
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;
还有一个通用的 PL/SQL 函数ETL principle。这是一段代码功能:
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,但它给了我错误,即集合类型错误。
提前致谢!真心希望得到您的帮助!
【问题讨论】:
-
FETCH带有BULK COLLECT子句的语句? download.oracle.com/docs/cd/E11882_01/appdev.112/e17126/… -
我对在流水线函数中使用
bulk collect的好处有点怀疑。即使您一次加载多行,您仍然只能一次将其中一个通过管道传输到输出。就此而言,除非函数中正在进行更多处理,否则我不得不质疑您为什么首先使用流水线函数。 -
如果需要更好的性能,我可以拒绝流水线函数。你推荐给我吗?
标签: database oracle plsql cursor