Oracle 存储过程包

create or replace package body cuttoship_lots is

  procedure prod_run(p_w_day date) as
  begin
    delete cuttoship_lot;
    commit;
    prod_erp(p_w_day);
    prod_szbgerp(p_w_day);
    prod_shs(p_w_day);
    prod_subedit;
    prod_ins_rpt;
    prod_update_0;
  end;  
  
  procedure prod_erp(p_w_day date) as
  begin
    --panel qty
       for c in (select 'erp' as site,lotno,max(gen_date) w_day
                  from facd321
                  where gen_date>=trunc(p_w_day) and gen_date<trunc(p_w_day+1)
                  group by lotno) loop
           insert into cuttoship_lot
           values(c.site,c.lotno,c.w_day);
           commit;
       end loop;
       
       --trf to sewing qty
       for c in (select 'erp' as site,lotno,max(import_time) w_day
                  from facd512
                  where import_time>=trunc(p_w_day) and import_time<trunc(p_w_day+1)
                  group by lotno) loop
           insert into cuttoship_lot
           values(c.site,c.lotno,c.w_day);
           commit;
       end loop;
       
       --output qty
       for c in (select 'erp' as site,lotno,max(lrrq) w_day
                  from facd105
                  where lrrq>=trunc(p_w_day) and lrrq<trunc(p_w_day+1)
                  group by lotno) loop
           insert into cuttoship_lot
           values(c.site,c.lotno,c.w_day);
           commit;
       end loop;
       
       --leftover garments
       for c in (select 'erp' as site,lotno,max(lrrq) w_day
                  from facd550
                  where lrrq>=trunc(p_w_day) and lrrq<trunc(p_w_day+1)
                  group by lotno) loop
           insert into cuttoship_lot
           values(c.site,c.lotno,c.w_day);
           commit;
       end loop;
       
       --reason qty
       for c in (select 'erp' as site,lotno,max(lastupdate) w_day
                  from facd343
                  where lastupdate>=trunc(p_w_day) and lastupdate<trunc(p_w_day+1)
                  group by lotno) loop
           insert into cuttoship_lot
           values(c.site,c.lotno,c.w_day);
           commit;
       end loop;
       
       --log
       insert into facd610
        (op_type, info_type, prod_name, w_day, op_date, os_user)
       values
        ('Success',
         'cuttoship_lots',
         'prod_erp',
         trunc(p_w_day),
         SYSDATE,
         get_OS('OS_USER'));
       commit;
  exception
    when others then
      insert into facd610
        (op_type, info_type, prod_name, w_day, op_date, os_user)
      values
        ('Failure',
         'cuttoship_lots',
         'prod_erp',
         trunc(p_w_day),
         SYSDATE,
         get_OS('OS_USER'));
      commit;
  end; 
  
  procedure prod_szbgerp(p_w_day date) as
    p_ck number;
  begin
       p_ck:=0;
       --panel qty
       for c in (select 'szbgerp' as site,lotno,max(gen_date) w_day
                  from facd321@szbgerp
                  where gen_date>=trunc(p_w_day) and gen_date<trunc(p_w_day+1)
                  group by lotno) loop
           insert into cuttoship_lot
           values(c.site,c.lotno,c.w_day);
           commit;
           p_ck:=p_ck+1;
       end loop;
       if p_ck>0 then
         dbms_session.close_database_link('szbgerp');
         p_ck:=0;
       end if;
       
       --trf to sewing qty
       for c in (select 'szbgerp' as site,lotno,max(import_time) w_day
                  from facd512@szbgerp
                  where import_time>=trunc(p_w_day) and import_time<trunc(p_w_day+1)
                  group by lotno) loop
           insert into cuttoship_lot
           values(c.site,c.lotno,c.w_day);
           commit;
           p_ck:=p_ck+1;
       end loop;
       if p_ck>0 then
         dbms_session.close_database_link('szbgerp');
         p_ck:=0;
       end if;
       
       --output qty
       for c in (select 'szbgerp' as site,lotno,max(lrrq) w_day
                  from facd105@szbgerp
                  where lrrq>=trunc(p_w_day) and lrrq<trunc(p_w_day+1)
                  group by lotno) loop
           insert into cuttoship_lot
           values(c.site,c.lotno,c.w_day);
           commit;
           p_ck:=p_ck+1;
       end loop;
       if p_ck>0 then
         dbms_session.close_database_link('szbgerp');
         p_ck:=0;
       end if;
       
       --leftover garments
       for c in (select 'szbgerp' as site,lotno,max(w_day) w_day
                  from facd340@szbgerp
                  where w_day>=trunc(p_w_day) and w_day<trunc(p_w_day+1)
                  group by lotno) loop
           insert into cuttoship_lot
           values(c.site,c.lotno,c.w_day);
           commit;
           p_ck:=p_ck+1;
       end loop;
       if p_ck>0 then
         dbms_session.close_database_link('szbgerp');
         p_ck:=0;
       end if;
       
       --reason qty
       for c in (select 'szbgerp' as site,lotno,max(lastupdate) w_day
                  from facd343@szbgerp
                  where lastupdate>=trunc(p_w_day) and lastupdate<trunc(p_w_day+1)
                  group by lotno) loop
           insert into cuttoship_lot
           values(c.site,c.lotno,c.w_day);
           commit;
           p_ck:=p_ck+1;
       end loop;
       if p_ck>0 then
         dbms_session.close_database_link('szbgerp');
       end if;
       --log
       insert into facd610
        (op_type, info_type, prod_name, w_day, op_date, os_user)
       values
        ('Success',
         'cuttoship_lots',
         'prod_szbgerp',
         trunc(p_w_day),
         SYSDATE,
         get_OS('OS_USER'));
       commit;
  exception
    when others then
      insert into facd610
        (op_type, info_type, prod_name, w_day, op_date, os_user)
      values
        ('Failure',
         'cuttoship_lots',
         'prod_szbgerp',
         trunc(p_w_day),
         SYSDATE,
         get_OS('OS_USER'));
      commit;
  end; 
  
  procedure prod_shs(p_w_day date) as
    p_ck number;
  begin
       p_ck:=0;
       
       --panel qty
       for c in (select 'shs' as site,lotno,max(gen_date) w_day
                  from facd321@shs
                  where gen_date>=trunc(p_w_day) and gen_date<trunc(p_w_day+1)
                  group by lotno) loop
           insert into cuttoship_lot
           values(c.site,c.lotno,c.w_day);
           commit;
           p_ck:=p_ck+1;
       end loop;
       if p_ck>0 then
         dbms_session.close_database_link('shs');
         p_ck:=0;
       end if;
       
       
       --trf to sewing qty
       for c in (select 'shs' as site,lotno,max(import_time) w_day
                  from facd512@shs
                  where import_time>=trunc(p_w_day) and import_time<trunc(p_w_day+1)
                  group by lotno) loop
           insert into cuttoship_lot
           values(c.site,c.lotno,c.w_day);
           commit;
           p_ck:=p_ck+1;
       end loop;
       if p_ck>0 then
         dbms_session.close_database_link('shs');
         p_ck:=0;
       end if;
       
       
       --output qty
       for c in (select 'shs' as site,lotno,max(lrrq) w_day
                  from facd105@shs
                  where lrrq>=trunc(p_w_day) and lrrq<trunc(p_w_day+1)
                  group by lotno) loop
           insert into cuttoship_lot
           values(c.site,c.lotno,c.w_day);
           commit;
           p_ck:=p_ck+1;
       end loop;
       if p_ck>0 then
         dbms_session.close_database_link('shs');
         p_ck:=0;
       end if;
       
       --leftover garments
       for c in (select 'shs' as site,lotno,max(w_day) w_day
                  from facd340@shs
                  where w_day>=trunc(p_w_day) and w_day<trunc(p_w_day+1)
                  group by lotno) loop
           insert into cuttoship_lot
           values(c.site,c.lotno,c.w_day);
           commit;
           p_ck:=p_ck+1;
       end loop;
       if p_ck>0 then
         dbms_session.close_database_link('shs');
         p_ck:=0;
       end if;
       
       --reason qty
       for c in (select 'shs' as site,lotno,max(lastupdate) w_day
                  from facd343@shs
                  where lastupdate>=trunc(p_w_day) and lastupdate<trunc(p_w_day+1)
                  group by lotno) loop
           insert into cuttoship_lot
           values(c.site,c.lotno,c.w_day);
           commit;
           p_ck:=p_ck+1;
       end loop;
       if p_ck>0 then
         dbms_session.close_database_link('shs');
       end if;
       
       --log
       insert into facd610
        (op_type, info_type, prod_name, w_day, op_date, os_user)
       values
        ('Success',
         'cuttoship_lots',
         'prod_shs',
         trunc(p_w_day),
         SYSDATE,
         get_OS('OS_USER'));
       commit;
  exception
    when others then
      insert into facd610
        (op_type, info_type, prod_name, w_day, op_date, os_user)
      values
        ('Failure',
         'cuttoship_lots',
         'prod_shs',
         trunc(p_w_day),
         SYSDATE,
         get_OS('OS_USER'));
      commit;
  end; 
  
  procedure prod_subedit as
    maxday date;
    p_ck number;
  begin
       --delete the smae lotno records
       for c in (select site,lotno,day
                  from cuttoship_lot
                  where site='erp') loop
           select count(0) into p_ck 
           from  cuttoship_lot
           where site='szbgerp' and lotno=c.lotno;
           if p_ck>0 then
             select day into maxday
             from  cuttoship_lot
             where site='szbgerp' and lotno=c.lotno;
             if maxday>c.day then
                delete cuttoship_lot where site=c.site and lotno=c.lotno;
             elsif maxday<c.day then
                delete cuttoship_lot where site='szbgerp' and lotno=c.lotno;
             end if;
           end if;
           commit;
       end loop;
       
       for c in (select site,lotno,day
                  from cuttoship_lot
                  where site in('erp','szbgerp')) loop
           select count(0) into p_ck 
           from  cuttoship_lot
           where site='shs' and lotno=c.lotno;
           if p_ck>0 then
             select day into maxday
             from  cuttoship_lot
             where site='shs' and lotno=c.lotno;
             if maxday>c.day then
                delete cuttoship_lot where site=c.site and lotno=c.lotno;
             elsif maxday<c.day then
                delete cuttoship_lot where site='shs' and lotno=c.lotno;
             end if;
           end if;
           commit;
       end loop;
       
       --log
       insert into facd610
        (op_type, info_type, prod_name, w_day, op_date, os_user)
       values
        ('Success',
         'cuttoship_lots',
         'prod_subedit',
         trunc(sysdate),
         sysdate,
         get_OS('OS_USER'));
       commit;
  exception
    when others then
      insert into facd610
        (op_type, info_type, prod_name, w_day, op_date, os_user)
      values
        ('Failure',
         'cuttoship_lots',
         'prod_subedit',
         trunc(sysdate),
         sysdate,
         get_OS('OS_USER'));
      commit;
  end; 
  
  procedure prod_ins_rpt as
  begin 
    prod_ins_rpt_erp;
    prod_ins_rpt_szbgerp;
    prod_ins_rpt_shs;
    prod_ins_rpt_protex;
  end; 

  procedure prod_ins_rpt_erp as
  begin
       --lot info
       for c1 in (select t1.lotno,lot_status,clot,wrk_no,customer,styleno,rmk_qty 
                 from facd101 t1
                 inner join (select distinct site,lotno
                 from cuttoship_lot
                 where site='erp') t2 on t1.lotno=t2.lotno
                 ) loop
           update cuttoship set lotstatus=c1.lot_status, clot=c1.clot, workshop=c1.wrk_no, 
           customer=c1.customer, styleno=c1.styleno, vpoqty=c1.rmk_qty
           where lotno=c1.lotno;
           
           if sql%notfound then
             insert into cuttoship
             (lotno, lotstatus, clot, workshop, customer, styleno, vpoqty)
             values
             (c1.lotno,c1.lot_status,c1.clot,c1.wrk_no,c1.customer,c1.styleno,c1.rmk_qty);
           end if;
           commit;
       end loop;
       --Mfg. Order Qty
       for c2 in (select t1.lotno,sum(nvl(qty, 0)) mfgqty
                 from facd302 t1
                 inner join (select distinct site,lotno
                 from cuttoship_lot
                 where site='erp') t2 on t1.lotno=t2.lotno
                 group by t1.lotno
                 ) loop
           update cuttoship 
           set mfgqty=c2.mfgqty
           where lotno=c2.lotno;
           commit;
       end loop;
       --Panel Qty 
       for c3 in (select t1.lotno,sum(nvl(qty, 0)) panelqty
                 from facd321 t1
                 inner join (select distinct site,lotno
                 from cuttoship_lot
                 where site='erp') t2 on t1.lotno=t2.lotno
                 where gen_date is not null and nvl(isactive, '0') = '0'
                 group by t1.lotno
                 ) loop
           update cuttoship 
           set panelqty=c3.panelqty
           where lotno=c3.lotno;
           commit;
       end loop;
       --Trf to Sewing & Panel Received  
       for c4 in (select t1.lotno,sum(nvl(qty, 0)) trftosewingqty 
                 from facd512 t1
                 inner join (select distinct site,lotno
                 from cuttoship_lot
                 where site='erp') t2 on t1.lotno=t2.lotno
                 where op='888'
                 group by t1.lotno
                 ) loop
           update cuttoship 
           set trftosewingqty=c4.trftosewingqty,panelreceived=c4.trftosewingqty
           where lotno=c4.lotno;
           commit;
       end loop;
       --Output Qty 
       for c5 in (select t1.lotno,sum(nvl(qty, 0)) outputqty 
                 from facd105 t1
                 inner join facd102 t2 on t1.lotno=t2.lotno and t1.operno=t2.lineno 
                 inner join (select distinct site,lotno
                 from cuttoship_lot
                 where site='erp') t3 on t1.lotno=t3.lotno
                 where t2.ch_po='FOF'
                 group by t1.lotno
                 ) loop
           update cuttoship 
           set outputqty=c5.outputqty
           where lotno=c5.lotno;
           commit;
       end loop;
       --Leftover Garments Stored in WH 
       --1.A Quality,2.B Quality 
       for c6 in (select A.lotno,(A.defect222-B.defect223) defectqty,A.deadqty
                  from
                   (select t1.lotno,sum(nvl(repqty,0)-nvl(rplqty,0)) defect222,sum(nvl(damqty, 0)) deadqty 
                 from facd550 t1
                 inner join (select distinct site,lotno
                 from cuttoship_lot
                 where site='erp') t2 on t1.lotno=t2.lotno
                 where operno='222'
                 group by t1.lotno) A,
                  (select t1.lotno,sum(nvl(repqty,0)) defect223 
                 from facd550 t1
                 inner join (select distinct site,lotno
                 from cuttoship_lot
                 where site='erp') t2 on t1.lotno=t2.lotno
                 where operno='223'
                 group by t1.lotno) B
                 where A.lotno=B.lotno(+)
                 ) loop
           update cuttoship 
           set defectqty=c6.defectqty,deadqty=c6.deadqty
           where lotno=c6.lotno;
           commit;
       end loop;
       --reason qty
       for c7 in (select distinct S.lotno,qwlqty,wlpzqty,zgpzqty,khyyqty,zlwtqty,ysqty
                  from
                 (SELECT t1.lotno from facd343 t1
                 inner join (select distinct site,lotno
                 from cuttoship_lot
                 where site='erp') t3 on t1.lotno=t3.lotno)S,
                 (select t1.lotno,nvl(t1.qty,0) qwlqty 
                 from facd343 t1 
                 inner join facd343_rea t2 on t1.reasoncode=t2.reasoncode 
                 inner join (select distinct site,lotno
                 from cuttoship_lot
                 where site='erp') t3 on t1.lotno=t3.lotno
                 where t1.isconfirm='Y' and t1.reasoncode='A')A,
                 (select t1.lotno,nvl(t1.qty,0) wlpzqty 
                 from facd343 t1 
                 inner join facd343_rea t2 on t1.reasoncode=t2.reasoncode 
                 inner join (select distinct site,lotno
                 from cuttoship_lot
                 where site='erp') t3 on t1.lotno=t3.lotno
                 where t1.isconfirm='Y' and t1.reasoncode='B')B,
                 (select t1.lotno,nvl(t1.qty,0) zgpzqty 
                 from facd343 t1 
                 inner join facd343_rea t2 on t1.reasoncode=t2.reasoncode 
                 inner join (select distinct site,lotno
                 from cuttoship_lot
                 where site='erp') t3 on t1.lotno=t3.lotno
                 where t1.isconfirm='Y' and t1.reasoncode='C')C,
                 (select t1.lotno,nvl(t1.qty,0) khyyqty 
                 from facd343 t1 
                 inner join facd343_rea t2 on t1.reasoncode=t2.reasoncode 
                 inner join (select distinct site,lotno
                 from cuttoship_lot
                 where site='erp') t3 on t1.lotno=t3.lotno
                 where t1.isconfirm='Y' and t1.reasoncode='D')D,
                 (select t1.lotno,nvl(t1.qty,0) zlwtqty 
                 from facd343 t1 
                 inner join facd343_rea t2 on t1.reasoncode=t2.reasoncode 
                 inner join (select distinct site,lotno
                 from cuttoship_lot
                 where site='erp') t3 on t1.lotno=t3.lotno
                 where t1.isconfirm='Y' and t1.reasoncode='E')E,
                 (select t1.lotno,nvl(t1.qty,0) ysqty 
                 from facd343 t1 
                 inner join facd343_rea t2 on t1.reasoncode=t2.reasoncode 
                 inner join (select distinct site,lotno
                 from cuttoship_lot
                 where site='erp') t3 on t1.lotno=t3.lotno
                 where t1.isconfirm='Y' and t1.reasoncode='F')F
                 where S.lotno=A.lotno(+)
                 and S.lotno=B.lotno(+)
                 and S.lotno=C.lotno(+)
                 and S.lotno=D.lotno(+)
                 and S.lotno=E.lotno(+)
                 and S.lotno=F.lotno(+)
                 ) loop
           update cuttoship 
           set qwlqty=c7.qwlqty,wlpzqty=c7.wlpzqty,zgpzqty=c7.zgpzqty,khyyqty=c7.khyyqty,
           zlwtqty=c7.zlwtqty,ysqty=c7.ysqty,
           subqty=c7.qwlqty+c7.wlpzqty+c7.zgpzqty+c7.khyyqty+c7.zlwtqty+c7.ysqty
           where lotno=c7.lotno;
           commit;
       end loop;
       --log
       insert into facd610
        (op_type, info_type, prod_name, w_day, op_date, os_user)
       values
        ('Success',
         'cuttoship_lots',
         'prod_ins_rpt_erp',
         trunc(sysdate),
         sysdate,
         get_OS('OS_USER'));
       commit;
  exception
    when others then
      insert into facd610
        (op_type, info_type, prod_name, w_day, op_date, os_user)
      values
        ('Failure',
         'cuttoship_lots',
         'prod_ins_rpt_erp',
         trunc(sysdate),
         sysdate,
         get_OS('OS_USER'));
      commit;
  end;
  
  procedure prod_ins_rpt_szbgerp as
    p_ck number;
  begin
       p_ck:=0;
       
       --lot info
       for c1 in (select t1.lotno,lot_status,clot,wrk_no,customer,styleno,rmk_qty 
                 from facd101@szbgerp t1
                 inner join (select distinct site,lotno
                 from cuttoship_lot
                 where site='szbgerp') t2 on t1.lotno=t2.lotno
                 ) loop
           update cuttoship set lotstatus=c1.lot_status, clot=c1.clot, workshop=c1.wrk_no, 
           customer=c1.customer, styleno=c1.styleno, vpoqty=c1.rmk_qty
           where lotno=c1.lotno;
           
           if sql%notfound then
             insert into cuttoship
             (lotno, lotstatus, clot, workshop, customer, styleno, vpoqty)
             values
             (c1.lotno,c1.lot_status,c1.clot,c1.wrk_no,c1.customer,c1.styleno,c1.rmk_qty);
           end if;
           commit;
           p_ck:=p_ck+1;
       end loop;
       if p_ck>0 then
          dbms_session.close_database_link('szbgerp');
          p_ck:=0;
       end if;
       
       --Mfg. Order Qty
       for c2 in (select t1.lotno,sum(nvl(qty, 0)) mfgqty
                 from facd302@szbgerp t1
                 inner join (select distinct site,lotno
                 from cuttoship_lot
                 where site='szbgerp') t2 on t1.lotno=t2.lotno
                 group by t1.lotno
                 ) loop
           update cuttoship 
           set mfgqty=c2.mfgqty
           where lotno=c2.lotno;
           commit;
           p_ck:=p_ck+1;
       end loop;
       if p_ck>0 then
          dbms_session.close_database_link('szbgerp');
          p_ck:=0;
       end if;
       
       --Panel Qty 
       for c3 in (select t1.lotno,sum(nvl(qty, 0)) panelqty
                 from facd321@szbgerp t1
                 inner join (select distinct site,lotno
                 from cuttoship_lot
                 where site='szbgerp') t2 on t1.lotno=t2.lotno
                 where gen_date is not null and nvl(isactive, '0') = '0'
                 group by t1.lotno
                 ) loop
           update cuttoship 
           set panelqty=c3.panelqty
           where lotno=c3.lotno;
           commit;
           p_ck:=p_ck+1;
       end loop;
       if p_ck>0 then
          dbms_session.close_database_link('szbgerp');
          p_ck:=0;
       end if;
       
       --Trf to Sewing & Panel Received  
       for c4 in (select t1.lotno,sum(nvl(qty, 0)) trftosewingqty 
                 from facd512@szbgerp t1
                 inner join (select distinct site,lotno
                 from cuttoship_lot
                 where site='szbgerp') t2 on t1.lotno=t2.lotno
                 where op='888'
                 group by t1.lotno
                 ) loop
           update cuttoship 
           set trftosewingqty=c4.trftosewingqty,panelreceived=c4.trftosewingqty
           where lotno=c4.lotno;
           commit;
           p_ck:=p_ck+1;
       end loop;
       if p_ck>0 then
          dbms_session.close_database_link('szbgerp');
          p_ck:=0;
       end if;
       
       --Output Qty 
       for c5 in (select t1.lotno,sum(nvl(qty, 0)) outputqty 
                 from facd105@szbgerp t1
                 inner join facd102@szbgerp t2 on t1.lotno=t2.lotno and t1.operno=t2.lineno 
                 inner join (select distinct site,lotno
                 from cuttoship_lot
                 where site='szbgerp') t3 on t1.lotno=t3.lotno
                 where t2.ch_po='FOF'
                 group by t1.lotno
                 ) loop
           update cuttoship 
           set outputqty=c5.outputqty
           where lotno=c5.lotno;
           commit;
           p_ck:=p_ck+1;
       end loop;
       if p_ck>0 then
          dbms_session.close_database_link('szbgerp');
          p_ck:=0;
       end if;
       
       --Leftover Garments 
       --1.A Quality,2.B Quality 
       for c6 in (select t1.lotno, sum(nvl(defect, 0)) defectqty, sum(nvl(dead, 0)) deadqty
                 from facd340@szbgerp t1
                 inner join (select distinct site,lotno
                 from cuttoship_lot
                 where site='szbgerp') t2 on t1.lotno=t2.lotno
                 group by t1.lotno
                 ) loop
           update cuttoship 
           set defectqty=c6.defectqty,deadqty=c6.deadqty
           where lotno=c6.lotno;
           commit;
           p_ck:=p_ck+1;
       end loop;
       if p_ck>0 then
          dbms_session.close_database_link('szbgerp');
          p_ck:=0;
       end if;
       
       --reason qty
       for c7 in (select distinct S.lotno,qwlqty,wlpzqty,zgpzqty,khyyqty,zlwtqty,ysqty
                  from
                 (SELECT t1.lotno from facd343@szbgerp t1
                 inner join (select distinct site,lotno
                 from cuttoship_lot
                 where site='szbgerp') t3 on t1.lotno=t3.lotno)S,
                 (select t1.lotno,nvl(t1.qty,0) qwlqty 
                 from facd343@szbgerp t1 
                 inner join facd343_rea@szbgerp t2 on t1.reasoncode=t2.reasoncode 
                 inner join (select distinct site,lotno
                 from cuttoship_lot
                 where site='szbgerp') t3 on t1.lotno=t3.lotno
                 where t1.isconfirm='Y' and t1.reasoncode='A')A,
                 (select t1.lotno,nvl(t1.qty,0) wlpzqty 
                 from facd343@szbgerp t1 
                 inner join facd343_rea@szbgerp t2 on t1.reasoncode=t2.reasoncode 
                 inner join (select distinct site,lotno
                 from cuttoship_lot
                 where site='szbgerp') t3 on t1.lotno=t3.lotno
                 where t1.isconfirm='Y' and t1.reasoncode='B')B,
                 (select t1.lotno,nvl(t1.qty,0) zgpzqty 
                 from facd343@szbgerp t1 
                 inner join facd343_rea@szbgerp t2 on t1.reasoncode=t2.reasoncode 
                 inner join (select distinct site,lotno
                 from cuttoship_lot
                 where site='szbgerp') t3 on t1.lotno=t3.lotno
                 where t1.isconfirm='Y' and t1.reasoncode='C')C,
                 (select t1.lotno,nvl(t1.qty,0) khyyqty 
                 from facd343@szbgerp t1 
                 inner join facd343_rea@szbgerp t2 on t1.reasoncode=t2.reasoncode 
                 inner join (select distinct site,lotno
                 from cuttoship_lot
                 where site='szbgerp') t3 on t1.lotno=t3.lotno
                 where t1.isconfirm='Y' and t1.reasoncode='D')D,
                 (select t1.lotno,nvl(t1.qty,0) zlwtqty 
                 from facd343@szbgerp t1 
                 inner join facd343_rea@szbgerp t2 on t1.reasoncode=t2.reasoncode 
                 inner join (select distinct site,lotno
                 from cuttoship_lot
                 where site='szbgerp') t3 on t1.lotno=t3.lotno
                 where t1.isconfirm='Y' and t1.reasoncode='E')E,
                 (select t1.lotno,nvl(t1.qty,0) ysqty 
                 from facd343@szbgerp t1 
                 inner join facd343_rea@szbgerp t2 on t1.reasoncode=t2.reasoncode 
                 inner join (select distinct site,lotno
                 from cuttoship_lot
                 where site='szbgerp') t3 on t1.lotno=t3.lotno
                 where t1.isconfirm='Y' and t1.reasoncode='F')F
                 where S.lotno=A.lotno(+)
                 and S.lotno=B.lotno(+)
                 and S.lotno=C.lotno(+)
                 and S.lotno=D.lotno(+)
                 and S.lotno=E.lotno(+)
                 and S.lotno=F.lotno(+)
                 ) loop
           update cuttoship 
           set qwlqty=c7.qwlqty,wlpzqty=c7.wlpzqty,zgpzqty=c7.zgpzqty,khyyqty=c7.khyyqty,
           zlwtqty=c7.zlwtqty,ysqty=c7.ysqty,
           subqty=c7.qwlqty+c7.wlpzqty+c7.zgpzqty+c7.khyyqty+c7.zlwtqty+c7.ysqty
           where lotno=c7.lotno;
           commit;
           p_ck:=p_ck+1;
       end loop;
       /**/
       --must have data before close database link!
       if p_ck>0 then
          dbms_session.close_database_link('szbgerp');
       end if;
       --log
       insert into facd610
        (op_type, info_type, prod_name, w_day, op_date, os_user)
       values
        ('Success',
         'cuttoship_lots',
         'prod_ins_rpt_szbgerp',
         trunc(sysdate),
         sysdate,
         get_OS('OS_USER'));
       commit;
  exception
    when others then
      insert into facd610
        (op_type, info_type, prod_name, w_day, op_date, os_user)
      values
        ('Failure',
         'cuttoship_lots',
         'prod_ins_rpt_szbgerp',
         trunc(sysdate),
         sysdate,
         get_OS('OS_USER'));
      commit;
  end;
  
  procedure prod_ins_rpt_shs as
    p_ck number;
  begin
       p_ck:=0;
       --lot info
       for c1 in (select t1.lotno,lot_status,clot,wrk_no,customer,styleno,rmk_qty 
                 from facd101@shs t1
                 inner join (select distinct site,lotno
                 from cuttoship_lot
                 where site='shs') t2 on t1.lotno=t2.lotno
                 ) loop
           update cuttoship set lotstatus=c1.lot_status, clot=c1.clot, workshop=c1.wrk_no, 
           customer=c1.customer, styleno=c1.styleno, vpoqty=c1.rmk_qty
           where lotno=c1.lotno;
           
           if sql%notfound then
             insert into cuttoship
             (lotno, lotstatus, clot, workshop, customer, styleno, vpoqty)
             values
             (c1.lotno,c1.lot_status,c1.clot,c1.wrk_no,c1.customer,c1.styleno,c1.rmk_qty);
           end if;
           commit;
           p_ck:=p_ck+1;
       end loop;
       if p_ck>0 then
          dbms_session.close_database_link('shs');
          p_ck:=0;
       end if;
       --Mfg. Order Qty
       for c2 in (select t1.lotno,sum(nvl(qty, 0)) mfgqty
                 from facd302@shs t1
                 inner join (select distinct site,lotno
                 from cuttoship_lot
                 where site='shs') t2 on t1.lotno=t2.lotno
                 group by t1.lotno
                 ) loop
           update cuttoship 
           set mfgqty=c2.mfgqty
           where lotno=c2.lotno;
           commit;
           p_ck:=p_ck+1;
       end loop;
       if p_ck>0 then
          dbms_session.close_database_link('shs');
          p_ck:=0;
       end if;
       --Panel Qty 
       for c3 in (select t1.lotno,sum(nvl(qty, 0)) panelqty
                 from facd321@shs t1
                 inner join (select distinct site,lotno
                 from cuttoship_lot
                 where site='shs') t2 on t1.lotno=t2.lotno
                 where gen_date is not null and nvl(isactive, '0') = '0'
                 group by t1.lotno
                 ) loop
           update cuttoship 
           set panelqty=c3.panelqty
           where lotno=c3.lotno;
           commit;
           p_ck:=p_ck+1;
       end loop;
       if p_ck>0 then
          dbms_session.close_database_link('shs');
          p_ck:=0;
       end if;
       --Trf to Sewing & Panel Received  
       for c4 in (select t1.lotno,sum(nvl(qty, 0)) trftosewingqty 
                 from facd512@shs t1
                 inner join (select distinct site,lotno
                 from cuttoship_lot
                 where site='shs') t2 on t1.lotno=t2.lotno
                 where op='888'
                 group by t1.lotno
                 ) loop
           update cuttoship 
           set trftosewingqty=c4.trftosewingqty,panelreceived=c4.trftosewingqty
           where lotno=c4.lotno;
           commit;
           p_ck:=p_ck+1;
       end loop;
       if p_ck>0 then
          dbms_session.close_database_link('shs');
          p_ck:=0;
       end if;
       --Output Qty 
       for c5 in (select t1.lotno,sum(nvl(qty, 0)) outputqty 
                 from facd105@shs t1
                 inner join facd102@shs t2 on t1.lotno=t2.lotno and t1.operno=t2.lineno 
                 inner join (select distinct site,lotno
                 from cuttoship_lot
                 where site='shs') t3 on t1.lotno=t3.lotno
                 where t2.ch_po='FOF'
                 group by t1.lotno
                 ) loop
           update cuttoship 
           set outputqty=c5.outputqty
           where lotno=c5.lotno;
           commit;
           p_ck:=p_ck+1;
       end loop;
       if p_ck>0 then
          dbms_session.close_database_link('shs');
          p_ck:=0;
       end if;
       --Leftover Garments 
       --1.A Quality,2.B Quality 
       for c6 in (select t1.lotno, sum(nvl(defect, 0)) defectqty, sum(nvl(dead, 0)) deadqty
                 from facd340@shs t1
                 inner join (select distinct site,lotno
                 from cuttoship_lot
                 where site='shs') t2 on t1.lotno=t2.lotno
                 group by t1.lotno
                 ) loop
           update cuttoship 
           set defectqty=c6.defectqty,deadqty=c6.deadqty
           where lotno=c6.lotno;
           commit;
           p_ck:=p_ck+1;
       end loop;
       if p_ck>0 then
          dbms_session.close_database_link('shs');
          p_ck:=0;
       end if;
       --reason qty
       for c7 in (select distinct S.lotno,qwlqty,wlpzqty,zgpzqty,khyyqty,zlwtqty,ysqty
                  from
                 (SELECT t1.lotno from facd343@shs t1
                 inner join (select distinct site,lotno
                 from cuttoship_lot
                 where site='shs') t3 on t1.lotno=t3.lotno)S,
                 (select t1.lotno,nvl(t1.qty,0) qwlqty 
                 from facd343@shs t1 
                 inner join facd343_rea@shs t2 on t1.reasoncode=t2.reasoncode 
                 inner join (select distinct site,lotno
                 from cuttoship_lot
                 where site='shs') t3 on t1.lotno=t3.lotno
                 where t1.isconfirm='Y' and t1.reasoncode='A')A,
                 (select t1.lotno,nvl(t1.qty,0) wlpzqty 
                 from facd343@shs t1 
                 inner join facd343_rea@shs t2 on t1.reasoncode=t2.reasoncode 
                 inner join (select distinct site,lotno
                 from cuttoship_lot
                 where site='shs') t3 on t1.lotno=t3.lotno
                 where t1.isconfirm='Y' and t1.reasoncode='B')B,
                 (select t1.lotno,nvl(t1.qty,0) zgpzqty 
                 from facd343@shs t1 
                 inner join facd343_rea@shs t2 on t1.reasoncode=t2.reasoncode 
                 inner join (select distinct site,lotno
                 from cuttoship_lot
                 where site='shs') t3 on t1.lotno=t3.lotno
                 where t1.isconfirm='Y' and t1.reasoncode='C')C,
                 (select t1.lotno,nvl(t1.qty,0) khyyqty 
                 from facd343@shs t1 
                 inner join facd343_rea@shs t2 on t1.reasoncode=t2.reasoncode 
                 inner join (select distinct site,lotno
                 from cuttoship_lot
                 where site='shs') t3 on t1.lotno=t3.lotno
                 where t1.isconfirm='Y' and t1.reasoncode='D')D,
                 (select t1.lotno,nvl(t1.qty,0) zlwtqty 
                 from facd343@shs t1 
                 inner join facd343_rea@shs t2 on t1.reasoncode=t2.reasoncode 
                 inner join (select distinct site,lotno
                 from cuttoship_lot
                 where site='shs') t3 on t1.lotno=t3.lotno
                 where t1.isconfirm='Y' and t1.reasoncode='E')E,
                 (select t1.lotno,nvl(t1.qty,0) ysqty 
                 from facd343@shs t1 
                 inner join facd343_rea@shs t2 on t1.reasoncode=t2.reasoncode 
                 inner join (select distinct site,lotno
                 from cuttoship_lot
                 where site='shs') t3 on t1.lotno=t3.lotno
                 where t1.isconfirm='Y' and t1.reasoncode='F')F
                 where S.lotno=A.lotno(+)
                 and S.lotno=B.lotno(+)
                 and S.lotno=C.lotno(+)
                 and S.lotno=D.lotno(+)
                 and S.lotno=E.lotno(+)
                 and S.lotno=F.lotno(+)
                 ) loop
           update cuttoship 
           set qwlqty=c7.qwlqty,wlpzqty=c7.wlpzqty,zgpzqty=c7.zgpzqty,khyyqty=c7.khyyqty,
           zlwtqty=c7.zlwtqty,ysqty=c7.ysqty,
           subqty=c7.qwlqty+c7.wlpzqty+c7.zgpzqty+c7.khyyqty+c7.zlwtqty+c7.ysqty
           where lotno=c7.lotno;
           commit;
           p_ck:=p_ck+1;
       end loop;
       if p_ck>0 then
          dbms_session.close_database_link('shs');
       end if;
       --log
       insert into facd610
        (op_type, info_type, prod_name, w_day, op_date, os_user)
       values
        ('Success',
         'cuttoship_lots',
         'prod_ins_rpt_shs',
         trunc(sysdate),
         sysdate,
         get_OS('OS_USER'));
       commit;
  exception
    when others then
      insert into facd610
        (op_type, info_type, prod_name, w_day, op_date, os_user)
      values
        ('Failure',
         'cuttoship_lots',
         'prod_ins_rpt_shs',
         trunc(sysdate),
         sysdate,
         get_OS('OS_USER'));
      commit;
  end;
  
  procedure prod_ins_rpt_protex as
    p_ck number;
  begin
       p_ck:=0;
       --shipmentdate
       for c1 in (select t2.cstord,max(t1.plcomn),to_date(cast(DT#5Y as nvarchar2(4))||'-'||cast(DT#5M as nvarchar2(2))||'-'||cast(DT#5D as nvarchar2(2))) shipmentdate
                 from proda201.ORFPLCA@db2gzbg t1
                 left join proda201.ORFPLFB@db2gzbg t2 on t1.plcomn=t2.plcomn
                 inner join (select distinct lotno from cuttoship_lot) t3 on t2.cstord=t3.lotno
                 group by t2.cstord,DT#5Y,DT#5M,DT#5D  
                 ) loop
           update cuttoship 
           set shipmentdate=c1.shipmentdate
           where lotno=c1.cstord;
           commit;
           p_ck:=p_ck+1;
       end loop;
       if p_ck>0 then
          dbms_session.close_database_link('db2gzbg');
          p_ck:=0;
       end if;
       --sample qty
       /*
       for c2 in (select t1.cstord,nvl(sum(qty),0) sampleqty
                 from proda201.orforbc@db2gzbg t1
                 inner join (select distinct lotno from cuttoship_lot) t2 on t1.cstord=t2.lotno
                 group by t1.cstord 
                 ) loop
           update cuttoship 
           set sampleqty=c2.sampleqty
           where lotno=c2.cstord;
           commit;
           p_ck:=p_ck+1;
       end loop;
       if p_ck>0 then
          dbms_session.close_database_link('db2gzbg');
          p_ck:=0;
       end if;
       */
       --shipped qty
       for c3 in (select t1.cstord,nvl(sum(qtypck),0) shippedqty
                 from proda201.orfplfb@db2gzbg t1
                 inner join (select distinct lotno from cuttoship_lot) t2 on t1.cstord=t2.lotno
                 group by t1.cstord 
                 ) loop
           update cuttoship 
           set shippedqty=c3.shippedqty
           where lotno=c3.cstord;
           commit;
           p_ck:=p_ck+1;
       end loop;
       if p_ck>0 then
          dbms_session.close_database_link('db2gzbg');
          p_ck:=0;
       end if;
       --Leftover Garments Stored in WH 
       --1.A Quality,2.B Quality 
       for c4 in (select S.cstord,astq,bstq
                  from
                  (select t1.cstord
                 from proda201.fgfstka@db2gzbg t1
                 inner join (select distinct lotno from cuttoship_lot) t2 on t1.cstord=t2.lotno
                  ) S,
                  (select t1.cstord,nvl(sum(stq),0) astq
                 from proda201.fgfstka@db2gzbg t1
                 inner join (select distinct lotno from cuttoship_lot) t2 on t1.cstord=t2.lotno
                 group by t1.cstord) A, 
                  (select t1.cstord,nvl(sum(stq),0) bstq
                 from proda201.fgfstka@db2gzbg t1
                 inner join (select distinct lotno from cuttoship_lot) t2 on t1.cstord=t2.lotno
                 group by t1.cstord) B
                  where S.cstord=A.cstord(+)
                  and S.cstord=B.cstord(+)
                 ) loop
           update cuttoship 
           set astq=c4.astq,bstq=c4.bstq
           where lotno=c4.cstord;
           commit;
           p_ck:=p_ck+1;
       end loop;
       if p_ck>0 then
          dbms_session.close_database_link('db2gzbg');
       end if;
       --radio,balabce,variance
       update cuttoship 
       set radio=decode(vpoqty,0,0,round(1-shippedqty/vpoqty,4)),
       balance=panelreceived-sampleqty-shippedqty-astq-bstq,
       variance=panelqty-sampleqty-shippedqty-astq-bstq;
       commit;
       --log
       insert into facd610
        (op_type, info_type, prod_name, w_day, op_date, os_user)
       values
        ('Success',
         'cuttoship_lots',
         'prod_ins_rpt_protex',
         trunc(sysdate),
         sysdate,
         get_OS('OS_USER'));
       commit;
  exception
    when others then
      insert into facd610
        (op_type, info_type, prod_name, w_day, op_date, os_user)
      values
        ('Failure',
         'cuttoship_lots',
         'prod_ins_rpt_protex',
         trunc(sysdate),
         sysdate,
         get_OS('OS_USER'));
      commit;
  end;
  
  procedure prod_update_0 as
  begin
    update cuttoship set vpoqty=0 where vpoqty is null;
    update cuttoship set mfgqty=0 where mfgqty is null;
    update cuttoship set panelqty=0 where panelqty is null;
    update cuttoship set trftosewingqty=0 where trftosewingqty is null;
    update cuttoship set panelreceived=0 where panelreceived is null;
    update cuttoship set sampleqty=0 where sampleqty is null;
    update cuttoship set outputqty=0 where outputqty is null;
    update cuttoship set defectqty=0 where defectqty is null;
    update cuttoship set deadqty=0 where deadqty is null;
    update cuttoship set shippedqty=0 where shippedqty is null;
    update cuttoship set radio=0 where radio is null;
    update cuttoship set balance=0 where balance is null;
    update cuttoship set astq=0 where astq is null;
    update cuttoship set bstq=0 where bstq is null;
    update cuttoship set variance=0 where variance is null;
    update cuttoship set qwlqty=0 where qwlqty is null;
    update cuttoship set wlpzqty=0 where wlpzqty is null;
    update cuttoship set zgpzqty=0 where zgpzqty is null;
    update cuttoship set khyyqty=0 where khyyqty is null;
    update cuttoship set zlwtqty=0 where zlwtqty is null;
    update cuttoship set ysqty=0 where ysqty is null;
    update cuttoship set subqty=0 where subqty is null;
    commit;
  end; 
end cuttoship_lots;

原文地址:https://www.cnblogs.com/vinsonLu/p/3642941.html