2つの変数を追跡するために、大きなテーブル(2.5Bレコード)を行単位で処理する必要があります。想像できるように、これはかなり遅いです。私はこの手順をどのように調整するかについてのアイデアを探しています。ありがとうございました。Oracle 11gで行(カーソル)処理を最適化する
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;
問題は本当にダウンしたときにBATSは= 'A' と各BATSについてBATSの= 'B' = 'T' レコード最新のPRC値を追跡するために、効率的なSQLを見つけることになります。
ありがとうございます。これはまさに私が必要とするもののように見えます。私は開発サーバー上でテストし、パフォーマンスを報告します。 –