始于for,陷于变量,终于忘掉变量初始化

J2EE 码拜 8年前 (2016-03-13) 956次浏览
小白工作不严谨,产品上线后,1000条数据金额计算算法错了,始于for,陷于变量,终于忘掉变量初始化,吸吸鼻子…..

代码功能:对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;

解决方案

20

其实就跟java循环差不多,理清楚逻辑就好

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明始于for,陷于变量,终于忘掉变量初始化
喜欢 (0)
[1034331897@qq.com]
分享 (0)