【发布时间】:2012-02-01 15:39:00
【问题描述】:
为了跟踪两个变量,我必须逐行处理一个大表(2.5B 记录)。可以想象,这是相当缓慢的。我正在寻找有关如何调整此过程的想法。谢谢。
declare
cursor c_data is select /* +index(data data_pk) */ * from data order by data_id;
r_data c_data%ROWTYPE;
lst_b_prc number(15,8);
lst_a_prc number(15,8);
begin
open c_data;
loop
fetch c_data into r_data;
exit when c_data%NOTFOUND;
if r_data.BATS = 'B' then
lst_b_prc := r_data.PRC;
end if;
if r_data.BATS = 'A' then
lst_a_prc := r_data.PRC;
end if;
if r_data.BATS = 'T' then
insert into trans .... lst_a_prc , lst_b_prc
end if;
end loop;
close c_data;
end;
问题归结为找到有效的 sql 来跟踪每个 BATS='T' 记录的 BATS='A' 和 BATS='B' 时的最新 PRC 值。
【问题讨论】:
标签: oracle stored-procedures query-optimization oracle11g