• 存储过程


     更新数据

    merge into 表名 a
    using(
    select  
    from
    where
    group by 
    )  on (
    
    条件
    )
    
    --如果条件成立,执行更新
    when matched then
    update set 只需更改条件即可
    
    --如果条件不成立,执行添加
    when not matched then
    insert (
    ) values(
    );
    commit;

    按照表中的一个时间字段分组,统计历史每天的量

    create or replace procedure PDW_DAY_HISTORY(o_status  out  integer,
                                                 o_info    out  varchar2)
    /**************************************************
      * 作    者:XX
        日    期:2018-06-25
        功    能:
            汇集银行端、开发商端、个人端历史每日报卷量
        算    法:
            1.按日期、各个系统汇总
    
        源    表:
            bank_pledge、deve_dcxx
        目 标 表:
            dw_bank_deve_per_day(sys_type,个人端:0 银行端:1 开发商端:2 )
        修改历史:
        时间         内容                               修改人
       ------------ ----------------------------------- --------
       2014-3-3     添加注释说明                        XXX
      **************************************************/
    is
    begin
      o_status:=0;
    
      delete from dw_bank_deve_per_day;
    
      --插入银行端数据
      insert into dw_bank_deve_per_day(
        date_id,
        sys_type,
        count_addres,
        count_accept,
        count_refuse
      )
      SELECT TO_char(A.gmt_commit, 'yyyymmdd') date_id,0,A.count_addres count_addres ,nvl(B.count_accept,0) count_accept,nvl(C.count_refuse,0) count_refuse
      FROM  (
           select to_date(TO_char(gmt_commit, 'yyyymmdd'), 'yyyymmdd') gmt_commit,
                  count(1) count_addres
           from zzbdc.per_case
                where commit_flag = '1'
                group by to_date(TO_char(gmt_commit, 'yyyymmdd'), 'yyyymmdd')
                order by to_date(TO_char(gmt_commit, 'yyyymmdd'), 'yyyymmdd')
           ) A LEFT JOIN(
           select to_date(TO_char(gmt_update, 'yyyymmdd'), 'yyyymmdd') gmt_update,
                  count(1) count_accept
           from zzbdc.per_case
                where commit_flag = '1'and realestatecaseno is not null
                group by to_date(TO_char(gmt_update, 'yyyymmdd'), 'yyyymmdd')
                order by to_date(TO_char(gmt_update, 'yyyymmdd'), 'yyyymmdd')
           ) B ON A.gmt_commit = B.gmt_update
           LEFT JOIN(
           select to_date(TO_char(gmt_update, 'yyyymmdd'), 'yyyymmdd') gmt_update,
                  count(1) count_refuse
              from zzbdc.per_case
                where commit_flag = '1'and deal_info is not null
                group by to_date(TO_char(gmt_update, 'yyyymmdd'), 'yyyymmdd')
                order by to_date(TO_char(gmt_update, 'yyyymmdd'), 'yyyymmdd')
           ) C
           ON B.gmt_update = C.gmt_update ORDER BY date_id;
      commit;
      --插入银行端数据
      insert into dw_bank_deve_per_day(
        date_id,
        sys_type,
        count_addres,
        count_accept,
        count_refuse
      )
      SELECT TO_char(A.gmt_commit, 'yyyymmdd') date_id,1,A.count_addres count_addres ,nvl(B.count_accept,0) count_accept,nvl(C.count_refuse,0) count_refuse
      FROM  (
           select to_date(TO_char(gmt_commit, 'yyyymmdd'), 'yyyymmdd') gmt_commit,
                  count(1) count_addres
           from zzbdc.bank_pledge
                where commit_flag = '1'
                group by to_date(TO_char(gmt_commit, 'yyyymmdd'), 'yyyymmdd')
                order by to_date(TO_char(gmt_commit, 'yyyymmdd'), 'yyyymmdd')
           ) A LEFT JOIN(
           select to_date(TO_char(gmt_update, 'yyyymmdd'), 'yyyymmdd') gmt_update,
                  count(1) count_accept
           from zzbdc.bank_pledge
                where commit_flag = '1'and realestatecaseno is not null
                group by to_date(TO_char(gmt_update, 'yyyymmdd'), 'yyyymmdd')
                order by to_date(TO_char(gmt_update, 'yyyymmdd'), 'yyyymmdd')
           ) B ON A.gmt_commit = B.gmt_update
           LEFT JOIN(
           select to_date(TO_char(gmt_update, 'yyyymmdd'), 'yyyymmdd') gmt_update,
                  count(1) count_refuse
              from zzbdc.bank_pledge
                where commit_flag = '1'and deal_info is not null
                group by to_date(TO_char(gmt_update, 'yyyymmdd'), 'yyyymmdd')
                order by to_date(TO_char(gmt_update, 'yyyymmdd'), 'yyyymmdd')
           ) C
           ON B.gmt_update = C.gmt_update ORDER BY date_id;
      commit;
      --插入开发商端数据
      insert into dw_bank_deve_per_day(
        date_id,
        sys_type,
        count_addres,
        count_accept,
        count_refuse
      )
      SELECT TO_char(A.gmt_commit, 'yyyymmdd') date_id,2,A.count_addres count_addres ,nvl(B.count_accept,0) count_accept,nvl(C.count_refuse,0) count_refuse
      FROM  (
           select to_date(TO_char(gmt_commit, 'yyyymmdd'), 'yyyymmdd') gmt_commit,
                  count(1) count_addres
           from zzbdc.deve_dcxx
                where commit_flag = '1'
                group by to_date(TO_char(gmt_commit, 'yyyymmdd'), 'yyyymmdd')
                order by to_date(TO_char(gmt_commit, 'yyyymmdd'), 'yyyymmdd')
           ) A LEFT JOIN(
           select to_date(TO_char(gmt_update, 'yyyymmdd'), 'yyyymmdd') gmt_update,
                  count(1) count_accept
           from zzbdc.deve_dcxx
                where commit_flag = '1'and realestatecaseno is not null
                group by to_date(TO_char(gmt_update, 'yyyymmdd'), 'yyyymmdd')
                order by to_date(TO_char(gmt_update, 'yyyymmdd'), 'yyyymmdd')
           ) B ON A.gmt_commit = B.gmt_update
           LEFT JOIN(
           select to_date(TO_char(gmt_update, 'yyyymmdd'), 'yyyymmdd') gmt_update,
                  count(1) count_refuse
              from zzbdc.deve_dcxx
                where commit_flag = '1'and deal_info is not null
                group by to_date(TO_char(gmt_update, 'yyyymmdd'), 'yyyymmdd')
                order by to_date(TO_char(gmt_update, 'yyyymmdd'), 'yyyymmdd')
           ) C
           ON B.gmt_update = C.gmt_update ORDER BY date_id;
      commit;
    
      --执行完毕
      o_status:=1;
      exception
      when others then
        rollback;
        --发生异常
        o_status:=99;
        o_info:=SQLCODE||'---'||SQLERRM||'---'||dbms_utility.format_error_backtrace;
    end PDW_DAY_HISTORY;

    汇总当天数据,其中p_tx_date 为传入的当天时间参数

    create or replace procedure PDW_BANK_DEVE_PER_DAY(p_tx_date date,
                                                 o_status  out  integer,
                                                 o_info    out  varchar2)
    /**************************************************
      * 作    者:高想
        日    期:2018-06-21
        功    能:
            汇集每日银行端、开发商端、个人端报卷量
        算    法:
            1.按日期、各个系统汇总
    
        源    表:
            bank_pledge、deve_dcxx、per_case
        临 时 表:
            tmp_bank_deve_per_day
        目 标 表:
            dw_bank_deve_per_day(sys_type,个人端:0 银行端:1 开发商端:2 )
        修改历史:
        时间         内容                               修改人
       ------------ ----------------------------------- --------
       2014-3-3     添加注释说明                        XXX
      **************************************************/
    is
      v_tx_date date;
      v_date_id varchar2(8);
    begin
      o_status:=0;
      v_tx_date:=trunc(p_tx_date);
      v_date_id:=to_char(v_tx_date,'yyyymmdd');
    
      --清空临时表
      --execute immediate 'truncate table tmp_bank_deve_per_day';
    
      delete from dw_bank_deve_per_day 
      where date_id=v_date_id;
        
     --插入个人端数据
      insert into dw_bank_deve_per_day(
        date_id,
        sys_type,
        count_addres,
        count_accept,
        count_refuse
      )
      select v_date_id,
        0 dummy,
        (select count(1) from zzbdc.per_case where commit_flag='1' and trunc(gmt_commit)=v_tx_date) count_addres,
        (select count(1) from zzbdc.per_case where commit_flag='1' and realestatecaseno is not null and trunc(gmt_update)=v_tx_date ) count_accept,
        (select count(1) from zzbdc.per_case where commit_flag='1' and deal_info is not null and trunc(gmt_update)=v_tx_date) count_refuse
      from dual group by dummy;
      commit;
      --插入银行端数据
      insert into dw_bank_deve_per_day(
        date_id,
        sys_type,
        count_addres,
        count_accept,
        count_refuse
      )
      select v_date_id,
        1 dummy,
        (select count(1) from zzbdc.bank_pledge where commit_flag='1' and trunc(gmt_commit)=v_tx_date) count_addres,
        (select count(1) from zzbdc.bank_pledge where commit_flag='1' and realestatecaseno is not null and trunc(gmt_update)=v_tx_date ) count_accept,
        (select count(1) from zzbdc.bank_pledge where commit_flag='1' and deal_info is not null and trunc(gmt_update)=v_tx_date) count_refuse
      from dual group by dummy;
      commit;
      --插入开发商端数据
      insert into dw_bank_deve_per_day(
        date_id,
        sys_type,
        count_addres,
        count_accept,
        count_refuse
      )
      select v_date_id,
        2 dummy,
        (select count(1) from zzbdc.deve_dcxx where commit_flag='1' and trunc(gmt_commit)=v_tx_date) count_addres,
        (select count(1) from zzbdc.deve_dcxx where commit_flag='1' and realestatecaseno is not null and trunc(gmt_update)=v_tx_date ) count_accept,
        (select count(1) from zzbdc.deve_dcxx where commit_flag='1' and deal_info is not null and trunc(gmt_update)=v_tx_date) count_refuse
      from dual group by dummy;
      commit;
    
      --执行完毕
      o_status:=1;
      exception
      when others then
        rollback;
        --发生异常
        o_status:=99;
        o_info:=SQLCODE||'---'||SQLERRM||'---'||dbms_utility.format_error_backtrace;
    end PDW_BANK_DEVE_PER_DAY;

    汇总数据

    create or replace procedure pdw_case_collect(p_tx_date date,
                                                 o_status  out  integer,
                                                 o_info    out  varchar2)
    /**************************************************
      * 作    者:XXX
        日    期:2017-11-2
        功    能:
           整理案卷信息
        算    法:
            1.按案卷编号汇总业务数,包含所有业务
            2.快速转移和抵押使用qicguid作为案卷编号,快速查封以id0作为案卷编号
            3.记录案卷各环节时长,注:有回退和移交的情况,每个环节会有多次,这里开始时间
              为首次进入该环节时间,结束时间为最后一次完成该环节时间
            4.权籍调查regist_type='0701' 不会记录部门、时间
    
        源    表:
            zzbdc.bdc_djzb, zzbdc.bdc_yw_sh, zzbdc.wfprocess, zzbdc.wfprocesshistory, zzbdc.sysuser, zzbdc.sysdept
        临 时 表:
    
        目 标 表:
            dw_case_collect
        修改历史:
        时间         内容                               修改人
       ------------ ----------------------------------- --------
       2014-3-3     添加注释说明                        XXX
      **************************************************/
      is
      v_tx_date date;
    begin
      o_status:=0;
      v_tx_date:=trunc(p_tx_date);
    
      --正式业务
      --插入新增登记记录
      insert into dw_case_collect(
        caseno,
        regist_type,
        regist_type_desc,
        busi_count,
        additional_flag,
        subsystemid
      )
      select a.受理编号,
        min(a.登记类型),
        max(a.登记类别),
        count(a.业务号),
        max(a.补录标志),
        max(a.subsystemid)
      from zzbdc.bdc_djzb a
      where not exists(
        select 1 from dw_case_collect b where a.受理编号=b.caseno
      )
      group by a.受理编号;
      commit;
    
      --更新退件标志
      update dw_case_collect a
      set a.refuse_flag='1',
        a.gmt_refuse=(select max(审核结束时间) from zzbdc.bdc_yw_sh b where a.caseno=b.受理编号)
      where exists(select 1 from zzbdc.bdc_djzb c where a.caseno=c.受理编号 and c.权属状态='3')
        and a.refuse_flag='0';
      commit;
      --删卷
      update dw_case_collect a
      set a.refuse_flag='1',
        a.gmt_refuse=nvl((select max(b.starttime) from zzbdc.wfprocess b where a.caseno=b.caseno),(select max(审核结束时间) from zzbdc.bdc_yw_sh c where a.caseno=c.受理编号))
      where not exists(select 1 from zzbdc.bdc_djzb c where a.caseno=c.受理编号)
        and a.refuse_flag='0' and a.fast_flag='0';
      commit;
    
      --更新登簿标志
      update dw_case_collect a
      set a.record_flag='1'
      where exists(select 1 from zzbdc.bdc_djzb b where a.caseno=b.受理编号 and b.登记簿标志=1)
        and a.record_flag='0';
      commit;
    
      --更新归档标志
      update dw_case_collect a
      set a.archive_flag='1'
      where exists(select 1 from zzbdc.bdc_djzb b where a.caseno=b.受理编号 and b.归档标志=1)
        and a.archive_flag='0';
      commit;
    
      --更新收件人信息
      merge into dw_case_collect a
      using(
        select rank() over(partition by p.caseno order by p.starttime) rn,
          p.caseno,
          p.dept,
          p.utuser,
          u.uname
        from zzbdc.wfprocess p
        left join zzbdc.sysuser u on p.utuser=u.id
        where p.atext='收件'
      ) b on (a.caseno=b.caseno and b.rn=1)
      when matched then
        update set a.dept=b.dept,
          a.user_id=b.utuser,
          a.user_name=b.uname
        where a.dept is null;
      commit;
      --更新收件人信息 已归档
      merge into dw_case_collect a
      using(
        select rank() over(partition by p.caseno order by p.starttime) rn,
          p.caseno,
          p.dept,
          p.utuser,
          u.uname
        from zzbdc.wfprocesshistory p
        left join zzbdc.sysuser u on p.utuser=u.id
        where p.atext='收件'
      ) b on (a.caseno=b.caseno and b.rn=1)
      when matched then
        update set a.dept=b.dept,
          a.user_id=b.utuser,
          a.user_name=b.uname
        where a.dept is null;
      commit;
      --更新收件人信息 无过程信息
      merge into dw_case_collect a
      using(
        select 受理编号 caseno,max(受理人员) user_name from zzbdc.bdc_yw_slsq s
        where exists(
          select 1 from dw_case_collect c
          where s.受理编号=c.caseno
            and c.dept is null
            and c.user_name is null
        )
        group by 受理编号
      ) b on (a.caseno=b.caseno)
      when matched then
        update set a.user_name=b.user_name;
      commit;
    
      merge into dw_case_collect a
      using(
        select rank() over(partition by uname order by ustate desc,dno desc,id desc) rn,
          decode(instr(dno,','),0,dno,substr(dno,1,instr(dno,',')-1)) dept,
          id,
          uname
        from zzbdc.sysuser
      ) b on(a.user_name=b.uname and b.rn=1)
      when matched then
        update set a.dept=b.dept,
          a.user_id=b.id
      where a.dept is null;
    
    
    
      --更新各环节时间
      merge into dw_case_collect a
      using(
        select caseno,
          min(gmt_accept_start) gmt_accept_start,
          max(gmt_accept_end) gmt_accept_end,
          min(gmt_check_start) gmt_check_start,
          max(gmt_check_end) gmt_check_end,
          min(gmt_recheck_start) gmt_recheck_start,
          max(gmt_recheck_end) gmt_recheck_end,
          min(gmt_ratify_start) gmt_ratify_start,
          max(gmt_ratify_end) gmt_ratify_end,
          min(gmt_record_start) gmt_record_start,
          max(gmt_record_end) gmt_record_end,
          min(gmt_make_start) gmt_make_start,
          max(gmt_make_end) gmt_make_end,
          min(gmt_charge_start) gmt_charge_start,
          max(gmt_charge_end) gmt_charge_end,
          min(gmt_send_start) gmt_send_start,
          max(gmt_send_end) gmt_send_end,
          max(gmt_archive_start) gmt_archive_start
        from (
          select caseno,
            decode(atext,'收件',starttime,null) gmt_accept_start,
            decode(atext,'收件',donetime,null) gmt_accept_end,
            decode(atext,'初审',starttime,null) gmt_check_start,
            decode(atext,'初审',donetime,null) gmt_check_end,
            (case when atext='审核' or atext='复审' then starttime else null end) gmt_recheck_start,
            (case when atext='审核' or atext='复审' then donetime else null end) gmt_recheck_end,
            decode(atext,'核定',starttime,null) gmt_ratify_start,
            decode(atext,'核定',donetime,null) gmt_ratify_end,
            (case when atext='记载登记薄' or atext='记载登记簿' then starttime else null end) gmt_record_start,
            (case when atext='记载登记薄' or atext='记载登记簿' then donetime else null end) gmt_record_end,
            decode(atext,'缮证',starttime,null) gmt_make_start,
            decode(atext,'缮证',donetime,null) gmt_make_end,
            decode(atext,'缴费',starttime,null) gmt_charge_start,
            decode(atext,'缴费',donetime,null) gmt_charge_end,
            decode(atext,'发证',starttime,null) gmt_send_start,
            decode(atext,'发证',donetime,null) gmt_send_end,
            decode(atext,'归档',starttime,null) gmt_archive_start,
            decode(atext,'归档',donetime,null) gmt_archive_end
          from zzbdc.wfprocess p
          where exists(
            select 1 from zzbdc.wfprocess p1
            where p.caseno=p1.caseno
              and (trunc(p1.starttime)=v_tx_date or trunc(p1.donetime)=v_tx_date)
          )
        )
        group by caseno
      ) b on (a.caseno=b.caseno)
      when matched then
        update set a.gmt_accept_start=b.gmt_accept_start,
          a.gmt_accept_end=b.gmt_accept_end,
          a.gmt_check_start=b.gmt_check_start,
          a.gmt_check_end=b.gmt_check_end,
          a.gmt_recheck_start=b.gmt_recheck_start,
          a.gmt_recheck_end=b.gmt_recheck_end,
          a.gmt_ratify_start=b.gmt_ratify_start,
          a.gmt_ratify_end=b.gmt_ratify_end,
          a.gmt_record_start=b.gmt_record_start,
          a.gmt_record_end=b.gmt_record_end,
          a.gmt_make_start=b.gmt_make_start,
          a.gmt_make_end=b.gmt_make_end,
          a.gmt_charge_start=b.gmt_charge_start,
          a.gmt_charge_end=b.gmt_charge_end,
          a.gmt_send_start=b.gmt_send_start,
          a.gmt_send_end=b.gmt_send_end,
          a.gmt_archive_start=b.gmt_archive_start;
      commit;
    
      --更新各环节时间 已归档
      merge into dw_case_collect a
      using(
        select caseno,
          min(gmt_accept_start) gmt_accept_start,
          max(gmt_accept_end) gmt_accept_end,
          min(gmt_check_start) gmt_check_start,
          max(gmt_check_end) gmt_check_end,
          min(gmt_recheck_start) gmt_recheck_start,
          max(gmt_recheck_end) gmt_recheck_end,
          min(gmt_ratify_start) gmt_ratify_start,
          max(gmt_ratify_end) gmt_ratify_end,
          min(gmt_record_start) gmt_record_start,
          max(gmt_record_end) gmt_record_end,
          min(gmt_make_start) gmt_make_start,
          max(gmt_make_end) gmt_make_end,
          min(gmt_charge_start) gmt_charge_start,
          max(gmt_charge_end) gmt_charge_end,
          min(gmt_send_start) gmt_send_start,
          max(gmt_send_end) gmt_send_end,
          max(gmt_archive_start) gmt_archive_start,
          max(gmt_archive_end) gmt_archive_end
        from (
          select caseno,
            decode(atext,'收件',starttime,null) gmt_accept_start,
            decode(atext,'收件',donetime,null) gmt_accept_end,
            decode(atext,'初审',starttime,null) gmt_check_start,
            decode(atext,'初审',donetime,null) gmt_check_end,
            (case when atext='审核' or atext='复审' then starttime else null end) gmt_recheck_start,
            (case when atext='审核' or atext='复审' then donetime else null end) gmt_recheck_end,
            decode(atext,'核定',starttime,null) gmt_ratify_start,
            decode(atext,'核定',donetime,null) gmt_ratify_end,
            (case when atext='记载登记薄' or atext='记载登记簿' then starttime else null end) gmt_record_start,
            (case when atext='记载登记薄' or atext='记载登记簿' then donetime else null end) gmt_record_end,
            decode(atext,'缮证',starttime,null) gmt_make_start,
            decode(atext,'缮证',donetime,null) gmt_make_end,
            decode(atext,'缴费',starttime,null) gmt_charge_start,
            decode(atext,'缴费',donetime,null) gmt_charge_end,
            decode(atext,'发证',starttime,null) gmt_send_start,
            decode(atext,'发证',donetime,null) gmt_send_end,
            decode(atext,'归档',starttime,null) gmt_archive_start,
            decode(atext,'归档',donetime,null) gmt_archive_end
          from zzbdc.wfprocesshistory ph
          where exists(
            select 1 from zzbdc.wfprocesshistory ph1
            where ph.caseno=ph1.caseno
              and (trunc(ph1.starttime)=v_tx_date or trunc(ph1.donetime)=v_tx_date)
          )
        )
        group by caseno
      ) b on (a.caseno=b.caseno)
      when matched then
        update set a.gmt_accept_start=b.gmt_accept_start,
          a.gmt_accept_end=b.gmt_accept_end,
          a.gmt_check_start=b.gmt_check_start,
          a.gmt_check_end=b.gmt_check_end,
          a.gmt_recheck_start=b.gmt_recheck_start,
          a.gmt_recheck_end=b.gmt_recheck_end,
          a.gmt_ratify_start=b.gmt_ratify_start,
          a.gmt_ratify_end=b.gmt_ratify_end,
          a.gmt_record_start=b.gmt_record_start,
          a.gmt_record_end=b.gmt_record_end,
          a.gmt_make_start=b.gmt_make_start,
          a.gmt_make_end=b.gmt_make_end,
          a.gmt_charge_start=b.gmt_charge_start,
          a.gmt_charge_end=b.gmt_charge_end,
          a.gmt_send_start=b.gmt_send_start,
          a.gmt_send_end=b.gmt_send_end,
          a.gmt_archive_start=b.gmt_archive_start,
          a.gmt_archive_end=b.gmt_archive_end;
      commit;
    
      --更新缮证数量
      merge into dw_case_collect a
      using(
        select z.受理编号 caseno,max(z.缮证人员) user_make,
          sum(decode(instr(nvl(z.缮证证号, z.不动产权证号), '证明'), 0, 1, 0)) c1,--证书
          sum(decode(instr(nvl(z.缮证证号, z.不动产权证号), '证明'), 0, 0, 1)) c2--证明
        from (
          select distinct x.受理编号,x.不动产权证号,y.缮证人员,y.缮证证号,y.印刷序列号
          from zzbdc.bdc_djzb x,zzbdc.bdc_yw_sz y
          where x.业务号=y.业务号
            and y.印刷序列号 is not null
            and trunc(y.缮证时间)=v_tx_date
        ) z
        group by z.受理编号
      ) b on (a.caseno=b.caseno)
      when matched then
        update set a.user_make=b.user_make,
               a.count_make_certificate=b.c1,
               a.count_make_certification=b.c2;
    
      --更新缴费金额
      merge into dw_case_collect a
      using(
        select s1.受理编号 caseno,
          nvl(sum(case when s2.sfno in('SFBH-3','SFBH-5','SFBH-7','SFBH-10') then nvl(s1.实收额,s1.应收额-nvl(s1.减免额,0)) else 0 end),0) charge_redidence,
          nvl(sum(case when s2.sfno in('SFBH-4','SFBH-6','SFBH-8','SFBH-9','SFBH-11') then nvl(s1.实收额,s1.应收额-nvl(s1.减免额,0)) else 0 end),0) charge_not_redidence,
          nvl(sum(case when s2.sfno in('SFBH-1','SFBH-2') then nvl(s1.实收额,s1.应收额-nvl(s1.减免额,0)) else 0 end),0) charge_production,
          nvl(sum(nvl(s1.实收额,s1.应收额-nvl(s1.减免额,0))),0) charge
        from zzbdc.bdc_sfx s1,zzbdc.bdc_sf_config s2
        where s1.收费项名称=s2.sfname
          and exists(
            select 1 from zzbdc.wfprocesshistory ph
            where s1.受理编号=ph.caseno
            and ph.atext='缴费'
            and trunc(ph.donetime)=v_tx_date
          )
        group by s1.受理编号
      ) b on(a.caseno=b.caseno)
      when matched then
        update set a.charge=b.charge,
          a.charge_production=b.charge_production,
          a.charge_redidence=b.charge_redidence,
          a.charge_not_redidence=b.charge_not_redidence;
    
      merge into dw_case_collect a
      using(
        select s1.受理编号 caseno,
          nvl(sum(case when s2.sfno in('SFBH-3','SFBH-5','SFBH-7','SFBH-10') then nvl(s1.实收额,s1.应收额-nvl(s1.减免额,0)) else 0 end),0) charge_redidence,
          nvl(sum(case when s2.sfno in('SFBH-4','SFBH-6','SFBH-8','SFBH-9','SFBH-11') then nvl(s1.实收额,s1.应收额-nvl(s1.减免额,0)) else 0 end),0) charge_not_redidence,
          nvl(sum(case when s2.sfno in('SFBH-1','SFBH-2') then nvl(s1.实收额,s1.应收额-nvl(s1.减免额,0)) else 0 end),0) charge_production,
          nvl(sum(nvl(s1.实收额,s1.应收额-nvl(s1.减免额,0))),0) charge
        from zzbdc.bdc_sfx s1,zzbdc.bdc_sf_config s2
        where s1.收费项名称=s2.sfname
          and exists(
            select 1 from zzbdc.wfprocess p
            where s1.受理编号=p.caseno
            and p.atext in('发证','归档')
            and p.direction=1
            and trunc(p.starttime)=v_tx_date
          )
        group by s1.受理编号
      ) b on(a.caseno=b.caseno)
      when matched then
        update set a.charge=b.charge,
          a.charge_production=b.charge_production,
          a.charge_redidence=b.charge_redidence,
          a.charge_not_redidence=b.charge_not_redidence;
      commit;
    
      --更新登簿人
      merge into dw_case_collect a
      using(
        select rank() over(partition by p.caseno order by p.donetime desc,p.pid desc) rn,
          p.caseno,
          p.dept,
          p.utuser,
          u.uname
        from zzbdc.wfprocess p
        left join zzbdc.sysuser u on p.utuser=u.id
        where p.atext in('记载登记簿','记载登记薄') and donetime is not null
      ) b on(a.caseno=b.caseno and b.rn=1)
      when matched then
        update set a.user_record=nvl(b.uname,b.utuser),a.record_flag='1'
        where a.user_record is null and (a.record_flag='1'
          or a.count_make_certificate>0
          or a.count_make_certificate>0
          or a.charge>0
          or a.gmt_send_start is not null
          or a.gmt_archive_start is not null);
    
      --更新登簿人
      merge into dw_case_collect a
      using(
        select rank() over(partition by p.caseno order by p.donetime desc,p.pid desc) rn,
          p.caseno,
          p.dept,
          p.utuser,
          u.uname
        from zzbdc.wfprocesshistory p
        left join zzbdc.sysuser u on p.utuser=u.id
        where p.atext in('记载登记簿','记载登记薄') and donetime is not null
      ) b on(a.caseno=b.caseno and b.rn=1)
      when matched then
        update set a.user_record=nvl(b.uname,b.utuser),a.record_flag='1'
        where a.user_record is null and (a.record_flag='1'
          or a.count_make_certificate>0
          or a.count_make_certificate>0
          or a.charge>0
          or a.gmt_send_start is not null
          or a.gmt_archive_start is not null);
    
      --快速业务
      --插入新增快速业务
      insert into dw_case_collect(
        caseno,
        regist_type,
        regist_type_desc,
        busi_count,
        user_name,
        gmt_accept_start,
        additional_flag,
        subsystemid,
        fast_flag
      )
      select distinct a.qicguid,
        '0102',
        '快速转移',
        1,
        a.受理人员,
        a.受理日期,
        decode(a.补录标志,'1','1','0'),
        a.subsystemid,
        '1'
      from zzbdc.bdc_kszy a
      where not exists(
        select 1 from dw_case_collect b where a.qicguid=b.caseno
      )
      union all
      select distinct a.qicguid,
        decode(instr(a.抵押类型,'注销'),0,'0201','0204'),
        decode(instr(抵押类型,'注销'),0,'快速抵押','快速抵押注销'),
        1,
        a.受理人员,
        a.受理日期,
        decode(a.补录标志,1,'1','0'),
        to_number(a.subsystemid),
        '1'
      from zzbdc.bdc_ksdy a
      where not exists(
        select 1 from dw_case_collect b where a.qicguid=b.caseno
      )
      union all
      select distinct to_char(id0),
        decode(instr(a.查封类型,'解查封'),0,'0404','0401'),
        decode(instr(查封类型,'解查封'),0,'快速解查封','快速查封'),
        1,
        a.受理人员,
        a.受理日期,
        decode(a.补录标志,'1','1','0'),
        to_number(a.subsystemid),
        '1'
      from zzbdc.bdc_zz_cfdj a
      where not exists(
        select 1 from dw_case_collect b where to_char(a.id0)=b.caseno
      );
      commit;
      --更新机构和用户id
      merge into dw_case_collect a
      using(
        select rank() over(partition by uname order by ustate desc,dno desc,id desc) rn,
          decode(instr(dno,','),0,dno,substr(dno,1,instr(dno,',')-1)) dept,
          id,
          uname
        from zzbdc.sysuser
      ) b on(a.user_name=b.uname and b.rn=1)
      when matched then
        update set a.dept=b.dept,
          a.user_id=b.id
      where a.fast_flag='1'
        and a.dept is null;
      commit;
    
      --更新登簿时间
      merge into dw_case_collect a
      using(
        select distinct qicguid caseno,
          登簿时间 gmt_record,登簿人 user_record
        from zzbdc.bdc_kszy a
        where trunc(登簿时间)=v_tx_date
        union all
        select distinct qicguid,
          登簿时间,登簿人
        from zzbdc.bdc_ksdy
        where trunc(登簿时间)=v_tx_date
        union all
        select distinct to_char(id0),
          登簿时间,登簿人
        from zzbdc.bdc_zz_cfdj a
        where trunc(登簿时间)=v_tx_date
      ) b on (a.caseno=b.caseno)
      when matched then
        update set a.gmt_record_end=b.gmt_record,
          a.user_record=b.user_record,
          a.record_flag='1';
      commit;
      --处理异常数据
      merge into dw_case_collect a
      using(
        select distinct qicguid caseno,登簿时间 gmt_record,登簿人 user_record
        from zzbdc.bdc_kszy a
        where exists(select 1 from dw_case_collect c where a.qicguid=c.caseno and c.record_flag='0')
          and a.权属状态 in('1','2')
        union all
        select distinct qicguid,
          登簿时间,登簿人
        from zzbdc.bdc_ksdy a
        where exists(select 1 from dw_case_collect c where a.qicguid=c.caseno and c.record_flag='0')
          and a.权属状态 in('1','2','4')
        union all
        select distinct to_char(id0),登簿时间,登簿人
        from zzbdc.bdc_zz_cfdj a
        where exists(select 1 from dw_case_collect c where to_char(a.id0)=c.caseno and c.record_flag='0')
          and a.权属状态!='0'
      ) b on (a.caseno=b.caseno)
      when matched then
        update set a.gmt_record_end=nvl(b.gmt_record,a.gmt_accept_start),
          a.user_record=b.user_record,
          a.record_flag='1';
      commit;
    
      --更新缮证时间
      merge into dw_case_collect a
      using(
        select distinct qicguid caseno,
          nvl(缮证时间,登簿时间) gmt_make,
          1 c1,
          0 c2,
          缮证人 user_make
        from zzbdc.bdc_kszy a
        where 是否出证='1'
          and 印刷序列号 is not null
          and trunc(nvl(缮证时间,登簿时间))=v_tx_date
        union all
        select distinct qicguid,
          nvl(缮证时间,登簿时间),
          0,
          1,
          缮证人
        from zzbdc.bdc_ksdy
        where 是否出证='1'
          and 印刷序列号 is not null
          and trunc(nvl(缮证时间,登簿时间))=v_tx_date
      ) b on (a.caseno=b.caseno)
      when matched then
        update set a.gmt_make_end=b.gmt_make,
          a.user_make=b.user_make,
          a.count_make_certificate=b.c1,
          a.count_make_certification=b.c2;
      commit;
    
      --更新缴费
      merge into dw_case_collect a
      using(
        select qicguid caseno,
          受理日期 gmt_charge,
          缴费金额 charge
        from zzbdc.bdc_kssf
        where trunc(受理日期)=v_tx_date
      ) b on (a.caseno=b.caseno)
      when matched then
        update set a.gmt_charge_end=b.gmt_charge,
          a.charge=b.charge;
      commit;
    
      --更新快速业务相关状态
      update dw_case_collect a
      set refuse_flag='1',
        gmt_refuse=nvl(gmt_make_end,nvl(gmt_record_end,gmt_accept_start))
      where additional_flag='0'
        and refuse_flag='0'
        and fast_flag='1'
        and (
          exists(select 1 from zzbdc.bdc_kszy b where a.caseno=b.qicguid and b.权属状态='3')
          or exists(select 1 from zzbdc.bdc_ksdy b where a.caseno=b.qicguid and b.权属状态='3')
        );
      commit;
      update dw_case_collect a
      set refuse_flag='1',
        gmt_refuse=nvl(gmt_make_end,nvl(gmt_record_end,gmt_accept_start))
      where additional_flag='0'
        and refuse_flag='0'
        and fast_flag='1'
        and substr(regist_type,1,2)='01'
        and not exists(select 1 from zzbdc.bdc_kszy b where a.caseno=b.qicguid);
      commit;
       update dw_case_collect a
      set refuse_flag='1',
        gmt_refuse=nvl(gmt_make_end,nvl(gmt_record_end,gmt_accept_start))
      where additional_flag='0'
        and refuse_flag='0'
        and fast_flag='1'
        and substr(regist_type,1,2)='02'
        and not exists(select 1 from zzbdc.bdc_ksdy b where a.caseno=b.qicguid);
      commit;
       update dw_case_collect a
      set refuse_flag='1',
        gmt_refuse=nvl(gmt_make_end,nvl(gmt_record_end,gmt_accept_start))
      where additional_flag='0'
        and refuse_flag='0'
        and fast_flag='1'
        and substr(regist_type,1,2)='04'
        and not exists(select 1 from zzbdc.bdc_zz_cfdj b where a.caseno=b.id0);
      commit;
    
      --更新异常标志 没有收件人、收件人已删除、无过程记录
      update dw_case_collect
      set exception_flag=1
      where dept is null
        and additional_flag='0'
        and regist_type!='0701';--权籍调查 测绘的不算
      commit;
      --快速件受理时间为空
      update dw_case_collect
      set exception_flag=1
      where gmt_accept_start is null
        and refuse_flag='0'
        and additional_flag='0'
        and fast_flag='1';
      commit;
    
      --更新案卷耗时
      --处理历史
      merge into dw_case_collect a
      using(
        select a.caseno,case
          when a.record_flag='0' then v_tx_date
          when a.record_flag='1' and ((fast_flag='0' and a.gmt_make_start is null) or (fast_flag='1' and regist_type in('0204','0401','0404'))) then a.gmt_record_end
          when a.gmt_make_end is not null then a.gmt_make_end
          else v_tx_date end end_time,
          trunc(a.gmt_accept_start) start_date,
        count(1) days
        from dw_case_collect a
        left join zzbdc.wfholiday b on
          b.hday between a.gmt_accept_start and case
          when a.record_flag='0' then v_tx_date
          when a.record_flag='1' and ((fast_flag='0' and a.gmt_make_start is null) or (fast_flag='1' and regist_type in('0204','0401','0404'))) then a.gmt_record_end
          when a.gmt_make_end is not null then a.gmt_make_end
          else v_tx_date end
      where a.cost_time is null and gmt_accept_start is not null and a.regist_type!='0701' and a.refuse_flag='0' and a.additional_flag='0'
      group by a.caseno,a.regist_type,a.record_flag,a.fast_flag,a.gmt_accept_start,a.gmt_make_start,a.gmt_record_end,a.gmt_make_end
      ) b on(a.caseno=b.caseno)
      when matched then
        update set a.cost_time=decode(b.start_date, trunc(b.end_time),
          decode(b.end_time,v_tx_date,
            b.end_time-b.start_date,
            b.end_time-a.gmt_accept_start),
          decode(b.end_time,v_tx_date,
            b.end_time-b.start_date-b.days,
            b.end_time-b.start_date-b.days-1));
      commit;
    
      --未办结
      update dw_case_collect
        set cost_time=v_tx_date-trunc(gmt_accept_start)-(select count(1) from zzbdc.wfholiday where hday>gmt_accept_start and hday<=v_tx_date)
      where regist_type!='0701' and record_flag='0' and additional_flag='0';
      commit;
      --不发证办结
      update dw_case_collect set cost_time=decode(
        trunc(gmt_record_end), trunc(gmt_accept_start), gmt_record_end-gmt_accept_start,
        gmt_record_end-trunc(gmt_accept_start)-1-(select count(1) from zzbdc.wfholiday where hday>gmt_accept_start and hday<gmt_record_end))
      where ((fast_flag='0' and gmt_make_start is null) or (fast_flag='1' and regist_type in('0204','0401','0404'))) and trunc(gmt_record_end)=v_tx_date and record_flag='1' and additional_flag='0';
      commit;
      --发证已办结
      update dw_case_collect set cost_time=gmt_make_end-trunc(gmt_accept_start)-1-(select count(1) from zzbdc.wfholiday where hday>gmt_accept_start and hday<gmt_make_end)
      where gmt_make_start is not null and trunc(gmt_make_end)=v_tx_date and record_flag='1' and additional_flag='0';
      --发证未办结
      update dw_case_collect set cost_time=v_tx_date-trunc(gmt_accept_start)-(select count(1) from zzbdc.wfholiday where hday>gmt_accept_start and hday<v_tx_date)
      where (gmt_make_start is not null or regist_type in('0102','0201')) and gmt_make_end is null and record_flag='1' and additional_flag='0';
      commit;
      
      --实时预警超期
      merge into dw_case_warn a
      using(
      select a.caseno,a.dept,nvl(b.atext,'收件') atext,b.uname,a.cost_time,d.房屋坐落||e.产权坐落||f.产权坐落 location,
        case when a.regist_type in ('0204','0504','0604') then 1 when a.regist_type in ('0201','0221','0304') then 5 when a.regist_type in ('0102','0305') then 7 else 20 end promise_time
      from dw_case_collect a left join (
        select caseno,trim(atext) atext,u.uname,row_number() over(partition by caseno order by pid desc) rn from zzbdc.wfprocess p
        left join zzbdc.sysuser u on p.utuser=u.id
      ) b on a.caseno=b.caseno and b.rn=1
        left join zzbdc.bdc_ksdy d on a.caseno=d.qicguid
        left join zzbdc.bdc_kszy e on a.caseno=e.qicguid
        left join zzbdc.bdc_zz_cfdj f on a.caseno=to_char(f.id0)
      where (a.record_flag='0' or (a.record_flag='1' and a.gmt_make_start is not null and a.gmt_make_end is null) or ( a.regist_type in('0102','0201') and a.gmt_make_end is null))
        and case when a.regist_type in ('0204','0504','0604') then 1 when a.regist_type in ('0201','0221','0304') then 5 when a.regist_type in ('0102','0305') then 7 else 20 end-a.cost_time<=case when a.regist_type in ('0204','0504','0604') then 0 else 1 end
        and a.gmt_accept_start>to_date('20180101','yyyymmdd')
        and a.refuse_flag='0'
      ) b on(a.caseno=b.caseno)
      when matched then
       update set a.atext=b.atext,a.user_name=b.uname,a.cost_time=b.cost_time,a.state=decode(b.promise_time-b.cost_time,1,1,2)
      when not matched then
        insert(caseno,
          location,
          dept,
          atext,
          user_name,
          promise_time,
          cost_time,
          state
        ) values(b.caseno,
          decode(b.location,null,null,'/'||b.location),
          b.dept,
          b.atext,
          b.uname,
          b.promise_time,
          b.cost_time,
          decode(b.promise_time-b.cost_time,1,1,2)
        );
      commit;
      delete from dw_case_warn a where exists(select 1 from dw_case_collect b where a.caseno=b.caseno and b.refuse_flag='1');
      delete from dw_case_warn a
        where exists(select 1 from dw_case_collect b where a.caseno=b.caseno and b.regist_type='0304')
          and exists(select 1 from zzbdc.bdc_yw_sz c where a.caseno=c.受理编号 and c.印刷序列号 is not null and c.缮证时间 is not null);
    
      UPDATE DW_CASE_WARN a SET busi_type='1' WHERE a.busi_type IS NULL and exists(SELECT 1 FROM DW_CASE_COLLECT b WHERE a.CASENO=b.caseno AND b.fast_flag='0');
      UPDATE DW_CASE_WARN a SET busi_type='2' WHERE a.busi_type IS NULL and exists(SELECT 1 FROM zzbdc.BDC_ZZ_CFDJ b WHERE a.CASENO=to_char(b.id0));
      UPDATE DW_CASE_WARN a SET busi_type='3' WHERE a.busi_type IS NULL and exists(SELECT 1 FROM zzbdc.BDC_KSZY b WHERE a.CASENO=b.QICGUID);
      UPDATE DW_CASE_WARN a SET busi_type='4' WHERE a.busi_type IS NULL and exists(SELECT 1 FROM zzbdc.BDC_KSDY b WHERE a.CASENO=b.QICGUID);
    
      --更新所有超期标志
      update dw_case_collect
        set exceed_flag='1'
      where exceed_flag='0'
        and additional_flag='0'
        and cost_time>=20;
      commit;
      update dw_case_collect
        set exceed_flag='1'
      where exceed_flag='0'
        and additional_flag='0'
        and regist_type in('0201','0221','0304') --抵押 联合抵押 预告抵押 5天
        and cost_time>=5;
      commit;
      update dw_case_collect
        set exceed_flag='1'
      where exceed_flag='0'
        and additional_flag='0'
        and regist_type in('0102','0305') --转移 转移抵押联合办理 预告注销 7天
        and cost_time>=7;
      commit;
      update dw_case_collect
        set exceed_flag='1'
      where exceed_flag='0'
        and additional_flag='0'
        and regist_type in('0204','0504','0604') --抵押注销 地役权注销登记 异议注销  1天
        and cost_time>=1;
      commit;
    
      --更新收件部门为1-3,改为1-3-2
      update dw_case_collect set dept='1-3-2'
      where dept='1-3';
      commit;
    
      --更新登记类型列表
      delete from stats_regist_type
      where group_name='noclass';
    
      insert into stats_regist_type
      select rownum,'noclass',null,regist_type,regist_type_desc,null from(
        select distinct regist_type,regist_type_desc
        from dw_case_collect
        where additional_flag='0'
        order by regist_type,regist_type_desc
      );
      commit;
    
      --执行完毕
      o_status:=1;
    
      exception
      when others then
        rollback;
        --发生异常,同样需要清空表,以防止无法修改临时表表结构
        o_status:=99;
        o_info:=SQLCODE||'---'||SQLERRM||'---'||dbms_utility.format_error_backtrace;
    end;

    汇总每天的数据

    create or replace procedure PDW_CASE_DEAL_DAY(p_tx_date date,
                                                 o_status  out  integer,
                                                 o_info    out  varchar2)
    /**************************************************
      * 作    者:XXX
        日    期:2017-11-8
        功    能:
            汇集每日不同部门不同业务受理业务量
        算    法:
            1.按日期、部门、业务类型汇总
            2.补录、异常和权籍调查数据不会计入
            
        源    表:
            dw_case_collect
        临 时 表:
            tmp_case_deal_day
        目 标 表:
            dw_case_deal_day
        修改历史:
        时间         内容                               修改人
       ------------ ----------------------------------- --------
       2014-3-3     添加注释说明                        XXX
      **************************************************/
    is
      v_tx_date date;
      v_date_id varchar2(8);
    begin
      o_status:=0;
      v_tx_date:=trunc(p_tx_date);
      v_date_id:=to_char(v_tx_date,'yyyymmdd');
      
      --清空临时表
      execute immediate 'truncate table tmp_case_deal_day';
    
      --插入收件数据
      insert into tmp_case_deal_day(
        date_id,
        dept,
        regist_type,
        regist_type_desc,
        count_accept_case,
        count_accept_busi
      )
      select v_date_id,
        dept,
        regist_type,
        regist_type_desc,
        count(caseno),
        sum(busi_count)
      from dw_case_collect
      where trunc(gmt_accept_start)=v_tx_date
        and additional_flag='0'
        and exception_flag='0'
        and regist_type!='0701'
      group by dept,regist_type,regist_type_desc;
      commit;
      
      --更新初审
      merge into tmp_case_deal_day a
      using(
        select v_date_id date_id,
          dept,
          regist_type,
          regist_type_desc,
          count(caseno) case_count,
          sum(busi_count) busi_count
        from dw_case_collect
        where trunc(gmt_check_start)=v_tx_date
          and additional_flag='0'
          and exception_flag='0'
          and regist_type!='0701'
        group by dept,regist_type,regist_type_desc
      ) b on (a.date_id=b.date_id
        and a.dept=b.dept
        and a.regist_type=b.regist_type
        and a.regist_type_desc=b.regist_type_desc
      )
      when matched then
        update set a.count_check_case=b.case_count,
          a.count_check_busi=b.busi_count
      when not matched then
        insert (
          date_id,
          dept,
          regist_type,
          regist_type_desc,
          count_check_case,
          count_check_busi
        ) values(
          b.date_id,
          b.dept,
          b.regist_type,
          b.regist_type_desc,
          b.case_count,
          b.busi_count
        );
      commit;
      
      --更新复审
      merge into tmp_case_deal_day a
      using(
        select v_date_id date_id,
          dept,
          regist_type,
          regist_type_desc,
          count(caseno) case_count,
          sum(busi_count) busi_count
        from dw_case_collect
        where trunc(gmt_recheck_start)=v_tx_date
          and additional_flag='0'
          and exception_flag='0'
          and regist_type!='0701'
        group by dept,regist_type,regist_type_desc
      ) b on (a.date_id=b.date_id
        and a.dept=b.dept
        and a.regist_type=b.regist_type
        and a.regist_type_desc=b.regist_type_desc
      )
      when matched then
        update set a.count_recheck_case=b.case_count,
          a.count_recheck_busi=b.busi_count
      when not matched then
        insert (
          date_id,
          dept,
          regist_type,
          regist_type_desc,
          count_recheck_case,
          count_recheck_busi
        ) values(
          b.date_id,
          b.dept,
          b.regist_type,
          b.regist_type_desc,
          b.case_count,
          b.busi_count
        );
      commit;
      
      --更新核定
      merge into tmp_case_deal_day a
      using(
        select v_date_id date_id,
          dept,
          regist_type,
          regist_type_desc,
          count(caseno) case_count,
          sum(busi_count) busi_count
        from dw_case_collect
        where trunc(gmt_ratify_start)=v_tx_date
          and additional_flag='0'
          and exception_flag='0'
          and regist_type!='0701'
        group by dept,regist_type,regist_type_desc
      ) b on (a.date_id=b.date_id
        and a.dept=b.dept
        and a.regist_type=b.regist_type
        and a.regist_type_desc=b.regist_type_desc
      )
      when matched then
        update set a.count_ratify_case=b.case_count,
          a.count_ratify_busi=b.busi_count
      when not matched then
        insert (
          date_id,
          dept,
          regist_type,
          regist_type_desc,
          count_ratify_case,
          count_ratify_busi
        ) values(
          b.date_id,
          b.dept,
          b.regist_type,
          b.regist_type_desc,
          b.case_count,
          b.busi_count
        );
      commit;
      
      --更新登簿
      merge into tmp_case_deal_day a
      using(
        select v_date_id date_id,
          dept,
          regist_type,
          regist_type_desc,
          count(caseno) case_count,
          sum(busi_count) busi_count
        from dw_case_collect
        where trunc(gmt_record_end)=v_tx_date
          and additional_flag='0'
          and exception_flag='0'
          and record_flag='1'
          and regist_type!='0701'
        group by dept,regist_type,regist_type_desc
      ) b on (a.date_id=b.date_id
        and a.dept=b.dept
        and a.regist_type=b.regist_type
        and a.regist_type_desc=b.regist_type_desc
      )
      when matched then
        update set a.count_record_case=b.case_count,
          a.count_record_busi=b.busi_count
      when not matched then
        insert (
          date_id,
          dept,
          regist_type,
          regist_type_desc,
          count_record_case,
          count_record_busi
        ) values(
          b.date_id,
          b.dept,
          b.regist_type,
          b.regist_type_desc,
          b.case_count,
          b.busi_count
        );
      commit;
      
      --更新缮证 以截止时间计入当天
      merge into tmp_case_deal_day a
      using(
        select v_date_id date_id,
          dept,
          regist_type,
          regist_type_desc,
          count(caseno) case_count,
          sum(busi_count) busi_count,
          sum(count_make_certificate) certificate_count,
          sum(count_make_certification) certification_count
        from dw_case_collect
        where trunc(gmt_make_end)=v_tx_date
          and additional_flag='0'
          and exception_flag='0'
          and regist_type!='0701'
          and (count_make_certificate!=0 or count_make_certification!=0)
        group by dept,regist_type,regist_type_desc
      ) b on (a.date_id=b.date_id
        and a.dept=b.dept
        and a.regist_type=b.regist_type
        and a.regist_type_desc=b.regist_type_desc
      )
      when matched then
        update set a.count_make_case=b.case_count,
          a.count_make_busi=b.busi_count,
          a.count_make_certificate=b.certificate_count,
          a.count_make_certification=b.certification_count
      when not matched then
        insert (
          date_id,
          dept,
          regist_type,
          regist_type_desc,
          count_make_case,
          count_make_busi,
          count_make_certificate,
          count_make_certification
        ) values(
          b.date_id,
          b.dept,
          b.regist_type,
          b.regist_type_desc,
          b.case_count,
          b.busi_count,
          b.certificate_count,
          b.certification_count
        );
      commit;
      
      
      --更新缴费 以截止时间计入当天
      merge into tmp_case_deal_day a
      using(
        select v_date_id date_id,
          dept,
          regist_type,
          regist_type_desc,
          count(caseno) case_count,
          sum(busi_count) busi_count,
          sum(charge) charge,
          sum(charge_production) charge_production,
          sum(charge_redidence) charge_redidence,
          sum(charge_not_redidence) charge_not_redidence
        from dw_case_collect
        where trunc(gmt_charge_end)=v_tx_date
          and additional_flag='0'
          and exception_flag='0'
          and regist_type!='0701'
          and charge!=0
        group by dept,regist_type,regist_type_desc
      ) b on (a.date_id=b.date_id
        and a.dept=b.dept
        and a.regist_type=b.regist_type
        and a.regist_type_desc=b.regist_type_desc
      )
      when matched then
        update set a.count_charge_case=b.case_count,
               a.count_charge_busi=b.busi_count,
               a.charge=b.charge,
               a.charge_production=b.charge_production,
               a.charge_redidence=b.charge_redidence,
               a.charge_not_redidence=b.charge_not_redidence
      when not matched then
        insert (
          date_id,
          dept,
          regist_type,
          regist_type_desc,
          count_charge_case,
          count_charge_busi,
          charge,
          charge_production,
          charge_redidence,
          charge_not_redidence
        ) values(
          b.date_id,
          b.dept,
          b.regist_type,
          b.regist_type_desc,
          b.case_count,
          b.busi_count,
          b.charge,
          b.charge_production,
          b.charge_redidence,
          b.charge_not_redidence
        );
      commit;
      
      --更新发证 存在已发证但没有移交归档情况
      merge into tmp_case_deal_day a
      using(
        select v_date_id date_id,
               dept,
               regist_type,
               regist_type_desc,
               count(caseno) case_count,
               sum(busi_count) busi_count
        from dw_case_collect c
        where trunc(gmt_send_end)=v_tx_date
          and additional_flag='0'
          and exception_flag='0'
          and regist_type!='0701'
          and exists(select 1 from zzbdc.bdc_yw_fz z where c.caseno=z.受理编号 and trunc(z.发证时间)<=v_tx_date)
        group by dept,regist_type,regist_type_desc
      ) b on (a.date_id=b.date_id
        and a.dept=b.dept
        and a.regist_type=b.regist_type
        and a.regist_type_desc=b.regist_type_desc
      )
      when matched then
        update set a.count_send_case=b.case_count,
          a.count_send_busi=b.busi_count
      when not matched then
        insert (
          date_id,
          dept,
          regist_type,
          regist_type_desc,
          count_send_case,
          count_send_busi
        ) values(
          b.date_id,
          b.dept,
          b.regist_type,
          b.regist_type_desc,
          b.case_count,
          b.busi_count
        );
      commit;
      
      --更新归档
      merge into tmp_case_deal_day a
      using(
        select v_date_id date_id,
          dept,
          regist_type,
          regist_type_desc,
          count(caseno) case_count,
          sum(busi_count) busi_count
        from dw_case_collect
        where trunc(gmt_archive_end)=v_tx_date
          and additional_flag='0'
          and exception_flag='0'
          and archive_flag='1'
          and regist_type!='0701'
        group by dept,regist_type,regist_type_desc
      ) b on (a.date_id=b.date_id
        and a.dept=b.dept
        and a.regist_type=b.regist_type
        and a.regist_type_desc=b.regist_type_desc
      )
      when matched then
      update set a.count_archive_case=b.case_count,
             a.count_archive_busi=b.busi_count
      when not matched then
        insert (
          date_id,
          dept,
          regist_type,
          regist_type_desc,
          count_archive_case,
          count_archive_busi
        ) values(
          b.date_id,
          b.dept,
          b.regist_type,
          b.regist_type_desc,
          b.case_count,
          b.busi_count
        );
      commit;
      
      --更新退件
      merge into tmp_case_deal_day a
      using(
        select v_date_id date_id,
          dept,
          regist_type,
          regist_type_desc,
          count(caseno) case_count,
          sum(busi_count) busi_count
        from dw_case_collect
        where trunc(gmt_refuse)=v_tx_date
          and additional_flag='0'
          and exception_flag='0'
          and regist_type!='0701'
        group by dept,regist_type,regist_type_desc
      ) b on (a.date_id=b.date_id
        and a.dept=b.dept
        and a.regist_type=b.regist_type
        and a.regist_type_desc=b.regist_type_desc
      )
      when matched then
        update set a.count_refuse_case=b.case_count,
               a.count_refuse_busi=b.busi_count
      when not matched then
        insert (
          date_id,
          dept,
          regist_type,
          regist_type_desc,
          count_refuse_case,
          count_refuse_busi
        ) values(
          b.date_id,
          b.dept,
          b.regist_type,
          b.regist_type_desc,
          b.case_count,
          b.busi_count
        );
      commit;
      
      --更新超期
      merge into tmp_case_deal_day a
      using(
        select v_date_id date_id,
          dept,
          regist_type,
          regist_type_desc,
          count(caseno) case_count,
          sum(busi_count) busi_count
        from dw_case_collect a
        where case when trunc(gmt_record_end)=v_tx_date and ((fast_flag='0' and gmt_make_start is null) or (fast_flag='1' and regist_type in('0102','0201'))) then 1
          when trunc(gmt_make_end)=v_tx_date and(fast_flag='1' or exists(select 1 from zzbdc.wfprocess p where a.caseno=p.caseno and p.atext in('缴费','发证','归档') and p.flag=1)) then 1 else 0 end=1
          and exceed_flag='1'
          and exception_flag='0'
          and record_flag='1'
          and regist_type!='0701'
        group by dept,regist_type,regist_type_desc
      ) b on (a.date_id=b.date_id
        and a.dept=b.dept
        and a.regist_type=b.regist_type
        and a.regist_type_desc=b.regist_type_desc
      )
      when matched then
        update set a.count_exceed_case=b.case_count,
               a.count_exceed_busi=b.busi_count
      when not matched then
        insert (
          date_id,
          dept,
          regist_type,
          regist_type_desc,
          count_exceed_case,
          count_exceed_busi
        ) values(
          b.date_id,
          b.dept,
          b.regist_type,
          b.regist_type_desc,
          b.case_count,
          b.busi_count
        );
      commit;
      
      --更改目标表
      delete from dw_case_deal_day
      where date_id=v_date_id;
    
      insert into dw_case_deal_day
      select date_id,
        dept,
        regist_type,
        regist_type_desc,
        count_accept_case,
        count_accept_busi,
        count_check_case,
        count_check_busi,
        count_recheck_case,
        count_recheck_busi,
        count_ratify_case,
        count_ratify_busi,
        count_record_case,
        count_record_busi,
        count_make_case,
        count_make_busi,
        count_charge_case,
        count_charge_busi,
        charge,
        charge_production,
        charge_redidence,
        charge_not_redidence,
        count_send_case,
        count_send_busi,
        count_archive_case,
        count_archive_busi,
        count_refuse_case,
        count_refuse_busi,
        count_make_certificate,
        count_make_certification,
        count_exceed_case,
        count_exceed_busi
      from tmp_case_deal_day;
      commit;
      
      --执行完毕
      o_status:=1;
      exception
      when others then
        rollback;
        --发生异常
        o_status:=99;
        o_info:=SQLCODE||'---'||SQLERRM||'---'||dbms_utility.format_error_backtrace; 
    end PDW_CASE_DEAL_DAY;

     循环树结构

    create or replace procedure pstats_dept is
    begin
      execute immediate 'truncate table stats_dept';
      insert into stats_dept
      select a.dno,b.dno,a.did,a.dname,a.部门简称,a.部门排序,'0'
      from zzbdc.sysdept a
      left join zzbdc.sysdept b on a.dpid=b.did;
      commit;
      update stats_dept set short_name='市中心' where short_name='市局';
      update stats_dept set short_name='东区合署',order_id=10
      where dname='东区合署办公';
      update stats_dept set short_name='北区合署',order_id=11
      where dname='北区合署办公';
      update stats_dept set short_name='西区合署',order_id=12
      where dname='西区合署办公';
      update stats_dept set short_name='新郑市' where dname='新郑市不动产登记中心';
      update stats_dept set short_name='登封市' where dname='登封市不动产登记中心';
      update stats_dept set short_name='中牟县' where dname='中牟县不动产登记中心';
      update stats_dept set short_name='荥阳市' where dname='荥阳市不动产登记中心';
      update stats_dept set short_name='上街区' where dname='上街区不动产登记中心';
      update stats_dept set short_name='新密市' where dname='新密市不动产登记中心';
      update stats_dept set short_name='航空港区' where dname='郑州航空港区不动产登记中心';
      update stats_dept set short_name='托管区' where dname='托管区不动产登记中心';
      commit;
    
      for v in(select did,dno from zzbdc.sysdept) loop
        insert into stats_dept
        select dno,v.dno,did,dname,null,null,'1'
        from zzbdc.sysdept
        connect by prior did=dpid
        start with did=v.did;
        commit;
      end loop;
    
    end pstats_dept;
  • 相关阅读:
    关于int8_t,uint8_t.....等数据类型的理解
    导出函数__declspec(dllexport)
    c++中的namespace
    GitHub C 和 C++ 开源库的清单(含示例代码)
    进制之间的转换一
    为 JSON 字符串创建对象
    HTML5 简单Demo1
    主要浏览器的调试工具
    fiddler2抓包工具使用图文教程
    JAVA将秒的总和转换成时分秒的格式
  • 原文地址:https://www.cnblogs.com/gaomanito/p/7998462.html
Copyright © 2020-2023  润新知