我被要求提供执行以下任务的最佳方法,
我们有一个从多个表中提取数据的视图,我们必须对这些提取的数据执行一些业务逻辑,然后将处理后的数据插入另一个表中。这里的问题是View非常复杂,并且在执行时会提取40百万条记录,这些记录本身会花费大量时间执行。但是在这些记录中,我们必须在大约2500万条记录上执行逻辑。
为此,我建议了一种方法,在全局临时表中插入这些24百万条记录,并在该临时表上执行所有业务逻辑,然后将处理后的数据插入到最终表中。
我请求您建议这种方法对于这种批量数据是否合适,或者我们仍然可以在更好的Oracle概念中执行此任务。我之前在TSQL上工作过,PLSQL对我来说是新手,因此任何建议都会非常有用。感谢
答案 0 :(得分:2)
在Oracle中,您通常不需要使用全局临时表来进行此类操作,而是可以对数组使用批量处理:
declare
cursor c is
select col1, col2 from my_view;
type t is table of c%rowtype;
array t;
begin
open c;
loop
fetch c bulk collect into array limit 1000;
exit when array.count = 0;
for i in 1..array.count loop
null; -- Perform business logic on array(i) here
end loop;
forall i in 1..array.count
insert into final_table (col1, col2)
values (array(i).col1, array(i).col2);
end loop;
close c;
end;
这只是一个最小的例子 - 有关更多详情,请参阅this article。