this script snippet cause the script to take 48+ hours to complete. The update is only 500K records.
the date data that is being compared is loaded from a prior script. So, I know the date format is correct. Similar scripts like this run in 10 minutes.
What is wrong in this code??
-----------code starts--------------------
----------
----------
--
begin
open data_cursor;
loop
fetch data_cursor into data_val;
exit when data_cursor%NOTFOUND;
update NSF_account_HOUSEHOLD set
hh_contribution_income = data_val.contribution_inco
me,
hh_balance = data_val.balance,
hh_nsf_fees = data_val.nsf_fees,
hh_nsf_waive_bank_error = data_val.nsf_waive_bank_er
ror,
hh_nsf_waive_cap = data_val.nsf_waive_cap,
hh_nsf_waive_other = data_val.nsf_waive_other,
hh_return = decode(sign(data_val.balan
ce - 100), -1, 0, data_val.contribution_inco
me * 2 /
data_val.balance) * 100,
hh_referral_code = decode(data_val.acct_offic
er_num, 0, 'R', 'O') ||
decode(sign(months_between
(data_val.
data_date,
data_val.o
pen_date) -5), -1, 'N',
decode(decode(sign(ceil((d
ecode(sign
(NSF_accou
nt_HOUSEHO
LD.acct_ba
lance-100)
, -1, 1.5,
.015 * data_val.balance) - data_val.contribution_inco
me * 2) / 35)), -1, 0,
ceil((decode(sign(data_val
.balance - 100), -1, 1.5, .015 * data_val.balance)
- data_val.contribution_inco
me * 2) / 35)),0,'0','1')),
hh_minimum_nsfs = decode(sign(ceil((decode(s
ign(NSF_ac
count_HOUS
EHOLD.acct
_balance-1
00), -1, 9999,
.015 * data_val.balance) - data_val.contribution_inco
me * 2) / 35)), -1, 0,
ceil((decode(sign(data_val
.balance - 100), -1, 1.5, .015 * data_val.balance)
- data_val.contribution_inco
me * 2) / 35)),
hh_first_deposit_open_date
= data_val.open_date,
hh_deposit_tenure=months_b
etween(dat
a_val.data
_date,data
_val.open_
date),
hh_best_chk_minimum_nsfs=d
ata_val.be
st_nsfs
where NSF_account_HOUSEHOLD.data
_date = data_val.data_date
and NSF_account_HOUSEHOLD.HOUS
EHOLD_KEY = data_val.HOUSEHOLD_KEY;
end loop;
end;
Start Free Trial