有一个对象类型,表由该对象组成。 所以我们开始吧:
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
但它给了我一个错误,说集合类型是错误的。
提前致谢!真心希望得到您的帮助!
最佳答案
如果您关心性能,那么您应该开始考虑组合两个游标。
当前您在 some_cursor 中执行查询一次,并且您在游标 some_cur2 中执行查询的次数与在第一个查询中选择的行数相同。这很可能是您的性能瓶颈。
如果您将两个查询合并为一个查询并执行游标循环(只执行一次查询),那么您将自动一次批量获取 100 行,因此可能不会有真正的需要手动转换为批量抓取。
问候,
罗布。
关于database - 将迭代的提取替换为 BULK COLLECT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7605660/