当前位置: 代码迷 >> Oracle开发 >> 各位,实在没办法,麻烦看看这个存储过程,小弟我找了一天都不知道有关问题所在
  详细解决方案

各位,实在没办法,麻烦看看这个存储过程,小弟我找了一天都不知道有关问题所在

热度:201   发布时间:2016-04-24 06:24:42.0
各位,实在没办法,麻烦看看这个存储过程,我找了一天都不知道问题所在
现在主要问题就是insert into 插入数据commit后没成功插入到表中,而且没有报错日志。实在找不出问题所在,单独insert into确可以。。。。麻烦看看
create or replace procedure P_COUNTRY_ORDER_DETAIL(pc_number varchar2,
                                                   loop_date date) is

  CURSOR cu_p_id IS
    select p.id
      from tb_drug_order_detail p
     where trunc(p.create_date, 'hh24') = trunc(loop_date, 'hh24');

  v_id        varchar2(255); 
  v_beginDate date;
  num         number;
  error_num   number;
begin
  v_beginDate := sysdate;
  num         := 0;
  error_num   := 0;

  open cu_p_id;
  LOOP
    fetch cu_p_id
      into v_id;
    EXIT WHEN cu_p_id%NOTFOUND;
    begin
     insert into gdyc_country.purchaseinfo
        select seq_purchaseinfo.NextVal,
               pc_number,
               t.ORDER_DETAIL_NO,
               i.id,
               mi.institute_name,
               t.drugs_id,
               d.medi_name,
               '',
               d.DOSAGE_FORM,
               '', --
               d.CONVERT_PER,
               d.Packaging_Unit,
               d.Packaging_Material,
               d.APPROVAL_NUMBER,
               d.MANUFACTURER_ID,
               d.MANUFACTURER,
               t.DISPATCH_ID,
               l.institute_name,
               t.order_number,
               (t.MATCH_PRICE / t.ORDER_NUMBER),
               t.RESPONSE_TIME,
               '1',
               sysdate,
               '',
               '0',
               d.DURG_SPEC
          from TB_DRUG_ORDER_DETAIL t
          left join tb_drug_order_info i
            on get_strarraystrofindex(t.order_detail_no, '_', '0') =
               i.order_num
          left join tb_drug_medical_institution mi
            on i.medical_id = mi.id
          left join tb_drug_information d
            on t.drugs_id = d.id
          left join tb_drug_logistics_institution l
            on t.dispatch_id = l.id
         where t.id =  v_id;
        
      num := num + 1;

    exception
      when others then
        begin
          rollback;
          put_line('[c-5]',
                   'P_COUNTRY_ORDER_DETAIL',
                   SQLCODE || ':' || SQLERRM,
                   '1',
                   v_id,
                   loop_date);
          error_num := error_num + 1;
        end;
    end;
  END LOOP;
  p_change_log('[c-5]',
               'P_COUNTRY_ORDER_DETAIL:' || trunc(loop_date, 'hh24'),
               v_beginDate,
               num,
               error_num);

  commit;
end P_COUNTRY_ORDER_DETAIL;
xi
------解决思路----------------------
这样的别人很难找
主要从两方面来检查
1是游标的查询是否有结果
2是是否出现异常,检查异常处理部分

在代码中跟踪调试一下
------解决思路----------------------
num变量是系统关键字
------解决思路----------------------
加一段exception处理,获取一下sqlerrm,看看错误信息是什么,调调就明白了。
  相关解决方案