私は次のコードを持っています.Oracleフォームブロックをループし、カーソルからのデータと比較します(カーソルはブロック自体からデータを取得します)。3 つのループがあるため、パフォーマンスはかなり悪く、多くのレコードで指数関数的に増加します。それを改善する方法について何かアドバイスはありますか?
loop
if :PAYMENTS_COLLECTIONS.CHECK_BOX='Y' then
temp_rec := :system.cursor_record;
acc_payment_no1 := :payments_collections.acc_payment_numb;
for pay_same_trans in payments_in_same_trans(:payments_collections.acc_payment_numb)
loop
first_record;
acc_payment_no2 := pay_same_trans.acc_payment_no;
REMOVE_PAID_TRANSACTION(pay_same_trans.payment_trans_seq_no);
loop
if pay_same_trans.acc_payment_no = :PAYMENTS_COLLECTIONS.acc_payment_numb and :PAYMENTS_COLLECTIONS.CHECK_BOX='Y' then
receipt_selected := true;
exit;
end if;
if :system.last_record = 'TRUE' then
exit;
end if;
next_record;
end loop;
if receipt_selected = false then
raise not_reverting_whole_trans;
end if;
receipt_selected := false;
end loop;
go_record(temp_rec);
end if;
if :system.last_record = 'TRUE' then
exit;
end if;
next_record;
end loop;