0

selectカーソル ループ内のステートメントがデータをフェッチしない場合は常に、ループを続行する必要があります。同じ例外を処理したい。この手順では、データが連続していることが検出されるたびに挿入o.idされますが、カーソルによって選択されたデータが関連データを保持していないとすぐに、ループが終了し、以前にフェッチされたレコードのデータのみが挿入され、ループは続行されません。

CREATE OR REPLACE procedure order_violation1(
   p_type          number,
   p_code          varchar2,
   p_submit_from   date,
   p_submit_to     date,
   p_approved_from date,
   p_approved_to   date,
   p_flag          number,
   p_status        varchar2
) is 
  pp_type varchar2(100);
  pp_company varchar2(50);
  pp_code varchar2(20);
  pp_ord_num varchar2(50);
  pp_status varchar2(50);
  SUBMIT_DATE date;
  APPROVAL_DATE date;
  ORDERING_RATIO_FLAG number;
  pp_submit_date date;
  pp_app_date date;
  pp_package varchar2(3000);
  pp_flag NUMBER;

  cursor pp_id is
     select distinct o.id 
       from orders o,
            partnerprofile pp
      where type_id=p_type 
        and o.ordering_ratio_flag=p_flag 
        and pp.id=o.to_partner_id 
        and decode(P_CODE,null,'1',pp.code) = decode(P_CODE,null,'1',p_code)
        and decode(p_submit_from,null, to_date('01/01/01','dd/mm/yy'),
                   to_date(submit_date,'dd/mm/yy')) between 
            decode(p_submit_from ,null,
                   to_date('01/01/01','dd/mm/yy'),p_submit_from)  and 
            decode(p_submit_to,null,to_date('01/01/01','dd/mm/yy'),'05-JUL-14')
        and decode(p_approved_from,null,
                   to_date('01/01/01','dd/mm/yy'),
                   to_date(submit_date,'dd/mm/yy')) between
            decode(p_approved_from,null,
                   to_date('01/01/01','dd/mm/yy'),p_approved_from) and
            decode(p_approved_to,null,to_date('01/01/01','dd/mm/yy'),'05-JUL-14')
        and decode(p_status,null,'1',o.status) = decode(p_status,null,'1',p_status);
begin
  FOR r_partner IN pp_id
  loop
     select name 
       into pp_type 
       from  partnertype 
      where id=p_type;

     select code,
            company_name 
       into pp_code,
            pp_company 
       from partnerprofile pp,
            orders o 
      where o.id=r_partner.id 
        and pp.id=o.to_partner_id;

     select ORDER_NUMBER,
            STATUS,
            SUBMIT_DATE,
            APPROVAL_DATE,
            ORDERING_RATIO_FLAG 
       into pp_ord_num,
            pp_status,
            pp_submit_date,
            pp_app_date,
            pp_flag 
       from orders 
      where id=r_partner.id;

      select distinct
             rtrim (xmlagg (
                            xmlelement (e, pk.name||'='||
                                        nvl(oln.total_amount,0) || '||')
                            ).extract ('//text()'), ',') 
              into pp_package
        from  package pk,
              orderlineitem oln 
        where oln.package_id=pk.id 
          and oln.order_id=r_partner.id 
       GROUP  BY oln.order_id;

     insert into order_violation_tab1 
       values (pp_type, pp_code, pp_company, pp_ord_num,
               pp_status, pp_submit_date, pp_app_date,
               pp_flag, null, null);
     --pp_package);

  END;
4

1 に答える 1