小白工作有点迷糊,居然把1000条数据金额计算算法错了,
,摸摸被自己伤到的心脏,吸吸鼻子.....
-----------------------------------------------------------------------------------------------------------
代码功能:对1000条数据进行金额计算,并更新表
错误代码:
v_current_claim c_current_claim%ROWTYPE;
v_claim_ins_amt cfs_plan.insurant_amt%type;
v_claim_adm_amt cfs_plan.manage_amt%type;
v_claim_bofo_amt l_subrogation_plan.bofo_amt%type;
v_overdue_max_date cfs_plan.payment_due_date%TYPE ;
v_claim_min_date cfs_plan.payment_due_date%TYPE ;
v_flag Varchar2(1) := 'N'; begin
for v_subrogation_plan in c_subrogation_plan loop
v_claim_ins_amt := 0;
v_claim_adm_amt := 0;
v_claim_bofo_amt := 0;
FOR v_overdue_plan IN c_overdue_plan(v_subrogation_plan.acct_no,v_subrogation_plan.CLAIM_DATE) LOOP
v_claim_ins_amt := v_claim_ins_amt + v_overdue_plan.INSURANT_AMT;
v_claim_adm_amt := v_claim_adm_amt + v_overdue_plan.MANAGE_AMT;
IF v_overdue_plan.PAYMENT_DUE_DATE = v_subrogation_plan.claim_date THEN
v_flag := 'Y';
END IF;
END LOOP;
end;
错误分析:
这个for循环中的变量是每次都需要初始化,还是沿用上一个循环变量的结果,小白曾经犯错过两次!!两次都是以2~3个小时的代价才定位出来,这是多么难的问题吗?!搞不懂啊自己呀,既然记不得,那我从现在起3天每天打卡确保记忆深刻![b][/b]
正确代码:
v_current_claim c_current_claim%ROWTYPE;
v_claim_ins_amt cfs_plan.insurant_amt%type;
v_claim_adm_amt cfs_plan.manage_amt%type;
v_claim_bofo_amt l_subrogation_plan.bofo_amt%type;
v_overdue_max_date cfs_plan.payment_due_date%TYPE ;
v_claim_min_date cfs_plan.payment_due_date%TYPE ;
v_flag Varchar2(1);
begin
for v_subrogation_plan in c_subrogation_plan loop
v_claim_ins_amt := 0;
v_claim_adm_amt := 0;
v_claim_bofo_amt := 0;
v_flag := 'N';
FOR v_overdue_plan IN c_overdue_plan(v_subrogation_plan.acct_no,v_subrogation_plan.CLAIM_DATE) LOOP
v_claim_ins_amt := v_claim_ins_amt + v_overdue_plan.INSURANT_AMT;
v_claim_adm_amt := v_claim_adm_amt + v_overdue_plan.MANAGE_AMT;
IF v_overdue_plan.PAYMENT_DUE_DATE = v_subrogation_plan.claim_date THEN
v_flag := 'Y';
END IF;
END LOOP;
end;

-----------------------------------------------------------------------------------------------------------
代码功能:对1000条数据进行金额计算,并更新表
错误代码:
v_current_claim c_current_claim%ROWTYPE;
v_claim_ins_amt cfs_plan.insurant_amt%type;
v_claim_adm_amt cfs_plan.manage_amt%type;
v_claim_bofo_amt l_subrogation_plan.bofo_amt%type;
v_overdue_max_date cfs_plan.payment_due_date%TYPE ;
v_claim_min_date cfs_plan.payment_due_date%TYPE ;
v_flag Varchar2(1) := 'N'; begin
for v_subrogation_plan in c_subrogation_plan loop
v_claim_ins_amt := 0;
v_claim_adm_amt := 0;
v_claim_bofo_amt := 0;
FOR v_overdue_plan IN c_overdue_plan(v_subrogation_plan.acct_no,v_subrogation_plan.CLAIM_DATE) LOOP
v_claim_ins_amt := v_claim_ins_amt + v_overdue_plan.INSURANT_AMT;
v_claim_adm_amt := v_claim_adm_amt + v_overdue_plan.MANAGE_AMT;
IF v_overdue_plan.PAYMENT_DUE_DATE = v_subrogation_plan.claim_date THEN
v_flag := 'Y';
END IF;
END LOOP;
end;
错误分析:
这个for循环中的变量是每次都需要初始化,还是沿用上一个循环变量的结果,小白曾经犯错过两次!!两次都是以2~3个小时的代价才定位出来,这是多么难的问题吗?!搞不懂啊自己呀,既然记不得,那我从现在起3天每天打卡确保记忆深刻![b][/b]
正确代码:
v_current_claim c_current_claim%ROWTYPE;
v_claim_ins_amt cfs_plan.insurant_amt%type;
v_claim_adm_amt cfs_plan.manage_amt%type;
v_claim_bofo_amt l_subrogation_plan.bofo_amt%type;
v_overdue_max_date cfs_plan.payment_due_date%TYPE ;
v_claim_min_date cfs_plan.payment_due_date%TYPE ;
v_flag Varchar2(1);
begin
for v_subrogation_plan in c_subrogation_plan loop
v_claim_ins_amt := 0;
v_claim_adm_amt := 0;
v_claim_bofo_amt := 0;
v_flag := 'N';
FOR v_overdue_plan IN c_overdue_plan(v_subrogation_plan.acct_no,v_subrogation_plan.CLAIM_DATE) LOOP
v_claim_ins_amt := v_claim_ins_amt + v_overdue_plan.INSURANT_AMT;
v_claim_adm_amt := v_claim_adm_amt + v_overdue_plan.MANAGE_AMT;
IF v_overdue_plan.PAYMENT_DUE_DATE = v_subrogation_plan.claim_date THEN
v_flag := 'Y';
END IF;
END LOOP;
end;