您的位置:首页 > 其它

procedure中的失足之-----跟变量翻脸

2016-07-07 21:36 155 查看
小白工作有点迷糊,居然把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天每天打卡确保记忆深刻!   

正确代码:
   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; 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: