博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Oracle 存储过程
阅读量:5158 次
发布时间:2019-06-13

本文共 60063 字,大约阅读时间需要 200 分钟。

引用自:

create or replace function func_get_user_by_msisdn(msisdn in number)   ------------------------------------------------------------------------------   ---功能描述:通过用户的电话号码,调用局方存储过程 获取用户的基本信息,      ---   ---          以遍更新card_user_info本地数据表。                            ---   ---参数:   msisdn in number 代表用户的电话号码(SIM卡)                   ---     ------------------------------------------------------------------------------   return pkg_gps_audit.user_record   is    user_record_info pkg_gps_audit.user_record; --用户基本信息类型     v_success number := 1;  --成功标志       begin     --首先获取正常用户的基本信息     begin         pkg_gps_audit.proc_get_userinfo(msisdn,user_record_info);          v_success := 1;     exception  when others then         v_success := 0;     end;       --其次,如果正常用户获取不到,再查离线用户信息     if v_success < 1 then    begin         pkg_gps_audit.proc_get_cancel_userinfo(msisdn,user_record_info);          v_success := 1;     exception when others then         v_success := 0;     end;     end if;               if v_success > 0 then        return user_record_info;     else      raise no_data_found;     end if;       return user_record_info;   end func_get_user_by_msisdn;             create or replace function func_get_user_id(msisdn_bak in number)   ------------------------------------------------------------------------------   ---功能描述:通过用户的电话号码获取用户的ID,(有保证数据及时性)            ---   ---参数:   msisdn in number 代表用户的电话号码(SIM卡)                   ---      ------------------------------------------------------------------------------   return number   is  user_info pkg_gps_audit.user_record; --用户基本信息     card_info card_user_info%rowtype; --用户基本信息表结构    type base_cursor is ref cursor;   cr base_cursor;     user_id number(15); --用户ID;   begin    begin      --如果本地card_user_info表可以找到数据,先在本地查找。       open cr for select * from card_user_info where msisdn = msisdn_bak;       fetch cr into card_info;       if cr%found then                 user_id := card_info.user_id;       else        --获取用户基本信息         user_info := func_get_user_by_msisdn(msisdn_bak);                  user_id := user_info.user_id;       end if;              close cr;              --返回用户ID        return user_id;     exception        when others then         raise no_data_found;  --抛出异常     end;          end;             create or replace function func_is_first_day   ------------------------------------------------------------------------------   ---功能描述:判断今天是否是该月的第一天(1号)                             ---   ---返回参数:1代表是,0代表不是                                            ---   ------------------------------------------------------------------------------   return number    is    v_result number := 0;          v_day varchar2(2);   begin    select to_char(sysdate,'dd') into v_day from dual;     if v_day = '01' then      v_result := 1;     else        v_result := 0;     end if;          return(v_result);   end func_is_first_day;             create or replace procedure proc_delete_day_fee_info   ------------------------------------------------------------------------------   ---功能描述: 只保留一个月得数据(8月的日账单10月份删除)                  ---   ------------------------------------------------------------------------------   is    type base_cursor is ref cursor;   cf base_cursor;   v_fee_id number(18);   begin    begin      open cf for  select a.fee_id from user_fee_info a ,day_fee_info b where a.fee_id = b.fee_id and to_char(b.start_time,'yyyy-mm') = to_char(add_months(sysdate,0),'yyyy-mm');       fetch cf into v_fee_id;       while cf%found loop         delete from user_fee_info where fee_id = v_fee_id;         delete from day_fee_info where fee_id = v_fee_id;         commit;                  fetch cf into v_fee_id;       end loop;              close cf;            exception when others then      rollback;       return;     end;              end proc_delete_day_fee_info;           create or replace procedure proc_delete_month_fee_info   ------------------------------------------------------------------------------   ---功能描述: 只保留6个月得数据(8月的日账单1月份删除)                  ---   ------------------------------------------------------------------------------   is    type base_cursor is ref cursor;   cf base_cursor;   v_fee_id number(18);   begin    begin      open cf for  select a.fee_id from user_fee_info a ,month_fee_info b where a.fee_id = b.fee_id and to_char(b.start_time,'yyyy-mm') = to_char(add_months(sysdate,0),'yyyy-mm');       fetch cf into v_fee_id;       while cf%found loop         delete from user_fee_info where fee_id = v_fee_id;         delete from month_fee_info where fee_id = v_fee_id;         commit;                  fetch cf into v_fee_id;       end loop;              close cf;            exception when others then      rollback;       return;     end;              end proc_delete_month_fee_info;         create or replace procedure proc_down_card_user_info   ------------------------------------------------------------------------------   ---功能描述:(重要)通过查询本地的group_sims表,获取sim号码集合。           ---   ---          该表里面的sim字段有两种类型,1种是真实的sim号码,另外一种是   ---   ---          虚拟的SIM号码,该虚拟的号码可以对应多哥真实的SIM号码。        ---   ---          simtype字段代表SIM类型,0代表是虚拟的号码,1代表是真实的号码。 ---   ---          当sim字段为虚拟号码时,对应的simtype为0,同时groupsim为空     ---   ---          当sim字段为真实号码时,对应的simtype为1,如果groupsim为空,   ---   ---          代表该号码没有对应的虚拟号。                                  ---   ---          groupuserid字段代表号码所对应的本地用户,一个用户可以对应多个 ---   ---          sim(虚拟的与真实的。)                                         ---   ---                                                                        ---   ---          遍历group_sims表,查询sim字段,如果为虚拟号码,就调用         ---   ---           proc_get_payed_msisdns,获取其绑定的真实号码,然后将该批真实  ---   ---           号码插入到group_sims,同时更新card_user_info表,如果sim是    ---   ---          真实号码,则只更新card_user_info表 。                         ---    ------------------------------------------------------------------------------   is    group_sims_info group_sims%rowtype;--定义group_sims表类型     type type_group_sims_ref is ref cursor; --定义group_sims表游标类型   group_sims_ref type_group_sims_ref;     user_record_info pkg_gps_audit.user_record; --定义用户基本类型     msisdn_table_temp pkg_gps_audit.msisdn_table; --用户SIM号码集合   msisdn_len number(10) := 0; --用户SIM号码集合长度     v_success number(1) := 1; --成功标志     begin    begin      --打开group_sims游标       open group_sims_ref for select * from group_sims where (groupsim is  null or length(ltrim(groupsim)) = 0);       fetch group_sims_ref into group_sims_info;         --开始遍历该游标       while group_sims_ref%found loop         --首先判断是否是虚拟号码,         if group_sims_info.simtype = 0 then          --首先通过虚拟号码,获取对应的SIM号码;           begin            pkg_gps_audit.proc_get_payed_msisdns(group_sims_info.sim,msisdn_table_temp,msisdn_len);                          if msisdn_len > 0 then              for iLen in 1 .. msisdn_len loop                 --首先更新原来group_sims表中同一个虚拟卡所对应的sim卡(先删后插)                 delete from group_sims t where t.simtype = 1 and to_number(t.groupsim) = group_sims_info.sim and t.groupuserid = group_sims_info.groupuserid;                                                    for xLen in 1..msisdn_len loop                   begin                    -----通过msisdn获取用户基本信息                     user_record_info := func_get_user_by_msisdn(msisdn_table_temp(xLen));                   exception when others then                    dbms_output.put_line('通过msisdn获取用户基本信息出现了异常!');                      v_success := 0;                   end;                                                       if v_success > 0 then                     insert into group_sims(id,sim,groupsim,groupuserid,simtype,updatetime)values(                      SEQ_GROUP_SIMS.Nextval,to_char(msisdn_table_temp(xLen)),group_sims_info.sim,group_sims_info.groupuserid,                     1,sysdate);                                          --更新原来在card_user_info里面的数据(先删除已经存在的再插入新的数据)                     delete from card_user_info where msisdn =  msisdn_table_temp(xLen);                                       insert into card_user_info(user_id,msisdn,brand_name,deal_name,service_status,stop_time,status)                     values(user_record_info.user_id,user_record_info.msisdn,user_record_info.brand_name,user_record_info.deal_name                     ,user_record_info.service_status,user_record_info.stop_time,1);                   end if;                                       --提交数据                   commit;                 end loop;                                 end loop;                             end if;                                       --没有与该虚拟卡对应的SIM号码             if msisdn_len <= 0 then                 --首先更新原来group_sims表中同一个虚拟卡所对应的sim卡(先删后插)                 delete from group_sims t where t.simtype = 1 and to_number(t.groupsim) = group_sims_info.sim and t.groupuserid = group_sims_info.groupuserid;                 commit;             end if;                        exception when others then            --回滚数据             rollback;             dbms_output.put_line('首先通过虚拟号码,获取对应的SIM号码出现了异常!');           end;         end if;                       --如果是真实号码,并且没有附属虚拟号码,则直接更新card_user_info表           if group_sims_info.simtype > 0 and  (group_sims_info.groupsim is null or length(group_sims_info.groupsim) = 0 ) then          begin            user_record_info := func_get_user_by_msisdn(group_sims_info.sim);                           --更新原来在card_user_info里面的数据(先删除已经存在的再插入新的数据)             delete from card_user_info where msisdn =  group_sims_info.sim ;             insert into card_user_info(user_id,msisdn,brand_name,deal_name,service_status,stop_time,status)             values(user_record_info.user_id,user_record_info.msisdn,user_record_info.brand_name,user_record_info.deal_name             ,user_record_info.service_status,user_record_info.stop_time,1);                          --提交数据             commit;                    exception when others then             --回滚数据             rollback;             dbms_output.put_line('更新card_user_info表出现了异常');           end;                               end if;             --遍历游标         fetch group_sims_ref into group_sims_info;       end loop;              --关闭游标       close group_sims_ref;           exception       when others then      return;     end;         end proc_down_card_user_info;         create or replace procedure proc_down_change_card     ------------------------------------------------------------------------------   ---功能描述:(重要)通过查询本地的group_sims表,获取sim号码集合。           ---   ---          该表里面的sim字段有两种类型,1种是真实的sim号码,另外一种是   ---   ---          虚拟的SIM号码,该虚拟的号码可以对应多哥真实的SIM号码。        ---   ---          simtype字段代表SIM类型,0代表是虚拟的号码,1代表是真实的号码。 ---   ---          当sim字段为虚拟号码时,对应的simtype为0,同时groupsim为空     ---   ---          当sim字段为真实号码时,对应的simtype为1,如果groupsim为空,   ---   ---          代表该号码没有对应的虚拟号。                                  ---   ---          groupuserid字段代表号码所对应的本地用户,一个用户可以对应多个 ---   ---          sim(虚拟的与真实的。)                                         ---   ---                                                                        ---   ---          遍历group_sims表,查询sim字段,如果为虚拟号码,就调用         ---   ---           proc_get_payed_msisdns,获取其绑定的真实号码,然后再获取换补卡---   ---           信息以更新change_card表,如果sim是真实号码,                 ---   ---            则只更新change_card表 。                                    ---     ------------------------------------------------------------------------------     is    group_sims_info group_sims%rowtype;--定义group_sims表类型     type type_group_sims_ref is ref cursor; --定义group_sims表游标类型   group_sims_ref type_group_sims_ref;           simcard_table_temp pkg_gps_audit.simcard_table; --用户换补卡信息集合   simcard_len number(10) := 0; --用户换补卡信息集合长度     msisdn_table_temp pkg_gps_audit.msisdn_table; --用户SIM号码集合   msisdn_len number(10) := 0; --用户SIM号码集合长度     begin    begin      --打开group_sims游标       open group_sims_ref for select * from group_sims where (groupsim is  null or length(ltrim(groupsim)) = 0);       fetch group_sims_ref into group_sims_info;         --开始遍历该游标       while group_sims_ref%found loop         --首先判断是否是虚拟号码,         if group_sims_info.simtype = 0 then          --首先通过虚拟号码,获取对应的SIM号码;           begin            pkg_gps_audit.proc_get_payed_msisdns(group_sims_info.sim,msisdn_table_temp,msisdn_len);                          if msisdn_len > 0 then --有数据               for iLen in 1 .. msisdn_len loop                  begin                   --通过用户ID,获取远程的换补卡用户信息集合                    pkg_gps_audit.proc_get_simcard_his(func_get_user_id(msisdn_table_temp(iLen)),simcard_table_temp,simcard_len);                                 --更新原来在change_card里面的数据(先删除已经存在的再插入新的数据)                    if simcard_len > 0 then                     --这个步骤的删除条件 有待确认。??                      delete from change_card where msisdn = group_sims_info.sim ;                      for ilen in 1 .. simcard_len loop                        insert into change_card(user_id,msisdn,accept_time,accept_memo,status) values(                        simcard_table_temp(ilen).user_id,simcard_table_temp(ilen).msisdn,simcard_table_temp(ilen).accept_time,                        simcard_table_temp(ilen).accept_memo,1);                      end loop;                    end if;                                        if simcard_len = 0 then                     dbms_output.put_line('通过用户IfffffffffD,获取远程的换补卡用户信息集合,出现了异常!');                    end if;                                         commit;                  exception when others then                   dbms_output.put_line('通过用户ID,获取远程的换补卡用户信息集合,出现了异常!');                    rollback;                  end;                                                  end loop;              end if;                                                  exception when others then            --回滚数据             rollback;             dbms_output.put_line('首先通过虚拟号码,获取对应的SIM号码出现了异常!');           end;         end if;                         if  group_sims_info.simtype > 0 and  (group_sims_info.groupsim is null or length(group_sims_info.groupsim) = 0 ) then --如果是真实号码,并且没有附属虚拟号码,则直接更新change_card表           begin            --通过用户ID,获取远程的换补卡用户信息集合             pkg_gps_audit.proc_get_simcard_his(func_get_user_id(group_sims_info.sim),simcard_table_temp,simcard_len);                          --更新原来在change_card里面的数据(先删除已经存在的再插入新的数据)             if simcard_len > 0 then              --这个步骤的删除条件 有待确认。??               delete from change_card where msisdn = group_sims_info.sim ;               for ilen in 1 .. simcard_len loop                 insert into change_card(user_id,msisdn,accept_time,accept_memo,status) values(                 simcard_table_temp(ilen).user_id,simcard_table_temp(ilen).msisdn,simcard_table_temp(ilen).accept_time,                 simcard_table_temp(ilen).accept_memo,1);               end loop;             end if;                                        --提交数据             commit;                    exception when others then             --回滚数据             rollback;              dbms_output.put_line('更新change_card表出现了异常');           end;                               end if;             --遍历游标         fetch group_sims_ref into group_sims_info;       end loop;              --关闭游标       close group_sims_ref;           exception       when others then      return;     end;         end proc_down_change_card;         create or replace procedure proc_down_fee_info   ------------------------------------------------------------------------------   ---功能描述:(重要)通过查询本地的group_sims表,获取sim号码集合。           ---   ---          该表里面的sim字段有两种类型,1种是真实的sim号码,另外一种是   ---   ---          虚拟的SIM号码,该虚拟的号码可以对应多哥真实的SIM号码。        ---   ---          simtype字段代表SIM类型,0代表是虚拟的号码,1代表是真实的号码。 ---   ---          当sim字段为虚拟号码时,对应的simtype为0,同时groupsim为空     ---   ---          当sim字段为真实号码时,对应的simtype为1,如果groupsim为空,   ---   ---          代表该号码没有对应的虚拟号。                                  ---   ---          groupuserid字段代表号码所对应的本地用户,一个用户可以对应多个 ---   ---          sim(虚拟的与真实的。)                                         ---   ---                                                                        ---   ---          遍历group_sims表,查询sim字段,如果为虚拟号码,就调用         ---   ---           proc_get_payed_msisdns,获取其绑定的真实号码,然后获取每日消费---   ---           情况,再分别保存到day_fee_Info,month_fee_info两张表,如果    ---   ---           sim是 真实号码,则只更新day_fee_Info,month_fee_info表 。     ---     ------------------------------------------------------------------------------     is    group_sims_info group_sims%rowtype;--定义group_sims表类型     type type_group_sims_ref is ref cursor; --定义group_sims表游标类型   group_sims_ref type_group_sims_ref;       msisdn_table_temp pkg_gps_audit.msisdn_table; --用户SIM号码集合   msisdn_len number(10) := 0; --用户SIM号码集合长度     base_fee pkg_gps_audit.fee_record;  --用户每日消费结构信息     is_first_day number(1); --是否是每月一号标志   user_fee_info_nextval number(15); --user_fee_info表的下一个序列号     user_fee_info_temp pkg_gps_audit.fee_record;  --user_fee_info数据缓存     v_fee_id number(15);--消费ID          begin    begin           --打开group_sims游标       open group_sims_ref for select * from group_sims where (groupsim is  null or length(ltrim(groupsim)) = 0);       fetch group_sims_ref into group_sims_info;         --开始遍历该游标       while group_sims_ref%found loop         --首先判断是否是虚拟号码,         if group_sims_info.simtype = 0 then          --首先通过虚拟号码,获取对应的SIM号码;           begin            pkg_gps_audit.proc_get_payed_msisdns(group_sims_info.sim,msisdn_table_temp,msisdn_len);                          if msisdn_len > 0 then --有数据               for iLen in 1 .. msisdn_len loop                                  --首先获取该用户每日消费记录,如果今天刚好是1号,那么获取到的数据刚好是上个月1-30号的总和                 --如果不是1号,那么获取到的是本月前几天的总和                 pkg_gps_audit.proc_get_userfee(func_get_user_id(msisdn_table_temp(iLen)),base_fee);                               --判断当前日期是否是每月1号                 is_first_day := func_is_first_day();                 if is_first_day = 1 then  --1号                                    -----(begin)保存到user_fee_info,day_fee_info表--------------                   begin                                     -----计算出上个月的总和                   begin                    select  user_id,                     sum(fee_base),sum(fee_pkg_month),sum(fee_keep),sum(fee_oth_month),sum(fee_vpn),                     sum(fee_shift),sum(fee_local),sum(fee_long),sum(fee_inprov),sum(fee_inprov_long),                     sum(fee_outprov),sum(fee_outprov_long),sum(fee_inter),sum(fee_inter_long),                     sum(fee_cmnet),sum(fee_trust),sum(fee_ptp_sms),sum(fee_mms),sum(fee_magazine),                     sum(fee_gprs),sum(fee_wap),sum(fee_data_month),                     sum(fee_data),sum(fee_ring),sum(fee_display),sum(fee_ext),sum(fee_other),                     sum(fee_all),sum(fee_for_others),sum(fee_by_others)                      into user_fee_info_temp from user_fee_info                     where user_id = base_fee.user_id                     and fee_id in (select fee_id from day_fee_info where to_char(start_time,'yyyy-mm') = to_char(add_months(sysdate,-1),'yyyy-mm'))  group by user_id ;                                        exception when others then                    user_fee_info_temp.user_id := base_fee.user_id;                     user_fee_info_temp.fee_base := 0.00;                     user_fee_info_temp.fee_pkg_month := 0.00;                     user_fee_info_temp.fee_keep := 0.00;                     user_fee_info_temp.fee_oth_month := 0.00;                     user_fee_info_temp.fee_vpn := 0.00;                     user_fee_info_temp.fee_shift := 0.00;                     user_fee_info_temp.fee_local := 0.00;                     user_fee_info_temp.fee_long := 0.00;                     user_fee_info_temp.fee_inprov := 0.00;                     user_fee_info_temp.fee_inprov_long := 0.00;                     user_fee_info_temp.fee_outprov := 0.00;                     user_fee_info_temp.fee_outprov_long := 0.00;                     user_fee_info_temp.fee_inter := 0.00;                     user_fee_info_temp.fee_inter_long := 0.00;                     user_fee_info_temp.fee_cmnet := 0.00;                     user_fee_info_temp.fee_trust := 0.00;                     user_fee_info_temp.fee_ptp_sms := 0.00;                     user_fee_info_temp.fee_mms := 0.00;                     user_fee_info_temp.fee_magazine := 0.00;                     user_fee_info_temp.fee_gprs := 0.00;                     user_fee_info_temp.fee_wap := 0.00;                     user_fee_info_temp.fee_data_month := 0.00;                     user_fee_info_temp.fee_data := 0.00;                     user_fee_info_temp.fee_ring := 0.00;                     user_fee_info_temp.fee_display := 0.00;                     user_fee_info_temp.fee_ext := 0.00;                     user_fee_info_temp.fee_other := 0.00;                     user_fee_info_temp.fee_all := 0.00;                     user_fee_info_temp.fee_for_others := 0.00;                     user_fee_info_temp.fee_by_others := 0.00;                   end;                                                      --保存到user_fee_info,day_fee_info表                   select seq_user_fee_info.nextval into user_fee_info_nextval from dual;                   insert into user_fee_info(fee_id,user_id,fee_base,fee_pkg_month,fee_keep,fee_oth_month,fee_vpn,                   fee_shift,fee_local,fee_long,fee_inprov,fee_inprov_long,fee_outprov,fee_outprov_long,fee_inter,fee_inter_long,                   fee_cmnet,fee_trust,fee_ptp_sms,fee_mms,fee_magazine,fee_gprs,fee_wap,fee_data_month,                   fee_data,fee_ring,fee_display,fee_ext,fee_other,fee_all,fee_for_others,fee_by_others)                   values(                   user_fee_info_nextval,base_fee.user_id,                   decode(sign(base_fee.fee_base-user_fee_info_temp.fee_base),1,base_fee.fee_base-user_fee_info_temp.fee_base,0.00),                   decode(sign(base_fee.fee_pkg_month-user_fee_info_temp.fee_pkg_month),1,base_fee.fee_pkg_month-user_fee_info_temp.fee_pkg_month,0.00),                   decode(sign(base_fee.fee_keep-user_fee_info_temp.fee_keep),1,base_fee.fee_keep-user_fee_info_temp.fee_keep,0.00),                    decode(sign(base_fee.fee_oth_month-user_fee_info_temp.fee_oth_month),1,base_fee.fee_oth_month-user_fee_info_temp.fee_oth_month,0.00),                     decode(sign(base_fee.fee_vpn-user_fee_info_temp.fee_vpn),1,base_fee.fee_vpn-user_fee_info_temp.fee_vpn,0.00),                      decode(sign(base_fee.fee_shift-user_fee_info_temp.fee_shift),1,base_fee.fee_shift-user_fee_info_temp.fee_shift,0.00),                       decode(sign(base_fee.fee_local-user_fee_info_temp.fee_local),1,base_fee.fee_local-user_fee_info_temp.fee_local,0.00),                       decode(sign(base_fee.fee_long-user_fee_info_temp.fee_long),1,base_fee.fee_long-user_fee_info_temp.fee_long,0.00),                       decode(sign(base_fee.fee_inprov-user_fee_info_temp.fee_inprov),1,base_fee.fee_inprov-user_fee_info_temp.fee_inprov,0.00),                       decode(sign(base_fee.fee_inprov_long-user_fee_info_temp.fee_inprov_long),1,base_fee.fee_inprov_long-user_fee_info_temp.fee_inprov_long,0.00),                       decode(sign(base_fee.fee_outprov-user_fee_info_temp.fee_outprov),1,base_fee.fee_outprov-user_fee_info_temp.fee_outprov,0.00),                       decode(sign(base_fee.fee_outprov_long-user_fee_info_temp.fee_outprov_long),1,base_fee.fee_outprov_long-user_fee_info_temp.fee_outprov_long,0.00),                       decode(sign(base_fee.fee_inter-user_fee_info_temp.fee_inter),1,base_fee.fee_inter-user_fee_info_temp.fee_inter,0.00),                       decode(sign(base_fee.fee_inter_long-user_fee_info_temp.fee_inter_long),1,base_fee.fee_inter_long-user_fee_info_temp.fee_inter_long,0.00),                        decode(sign(base_fee.fee_cmnet-user_fee_info_temp.fee_cmnet),1,base_fee.fee_cmnet-user_fee_info_temp.fee_cmnet,0.00),                         decode(sign(base_fee.fee_trust-user_fee_info_temp.fee_trust),1,base_fee.fee_trust-user_fee_info_temp.fee_trust,0.00),                          decode(sign(base_fee.fee_ptp_sms-user_fee_info_temp.fee_ptp_sms),1,base_fee.fee_ptp_sms-user_fee_info_temp.fee_ptp_sms,0.00),                           decode(sign(base_fee.fee_mms-user_fee_info_temp.fee_mms),1,base_fee.fee_mms-user_fee_info_temp.fee_mms,0.00),                            decode(sign(base_fee.fee_magazine-user_fee_info_temp.fee_magazine),1,base_fee.fee_magazine-user_fee_info_temp.fee_magazine,0.00),                             decode(sign(base_fee.fee_gprs-user_fee_info_temp.fee_gprs),1,base_fee.fee_gprs-user_fee_info_temp.fee_gprs,0.00),                             decode(sign(base_fee.fee_wap-user_fee_info_temp.fee_wap),1,base_fee.fee_wap-user_fee_info_temp.fee_wap,0.00),                              decode(sign(base_fee.fee_data_month-user_fee_info_temp.fee_data_month),1,base_fee.fee_data_month-user_fee_info_temp.fee_data_month,0.00),                               decode(sign(base_fee.fee_data-user_fee_info_temp.fee_data),1,base_fee.fee_data-user_fee_info_temp.fee_data,0.00),                                 decode(sign(base_fee.fee_ring-user_fee_info_temp.fee_ring),1,base_fee.fee_ring-user_fee_info_temp.fee_ring,0.00),                                  decode(sign(base_fee.fee_display-user_fee_info_temp.fee_display),1,base_fee.fee_display-user_fee_info_temp.fee_display,0.00),                                  decode(sign(base_fee.fee_ext-user_fee_info_temp.fee_ext),1,base_fee.fee_ext-user_fee_info_temp.fee_ext,0.00),                                  decode(sign(base_fee.fee_other-user_fee_info_temp.fee_other),1,base_fee.fee_other-user_fee_info_temp.fee_other,0.00),                                   decode(sign(base_fee.fee_all-user_fee_info_temp.fee_all),1,base_fee.fee_all-user_fee_info_temp.fee_all,0.00),                                   decode(sign(base_fee.fee_for_others-user_fee_info_temp.fee_for_others),1,base_fee.fee_for_others-user_fee_info_temp.fee_for_others,0.00),                                   decode(sign(base_fee.fee_by_others-user_fee_info_temp.fee_by_others),1,base_fee.fee_by_others-user_fee_info_temp.fee_by_others,0.00) );                                   insert into day_fee_info(id,fee_id,start_time) values(seq_day_fee_info.nextval,user_fee_info_nextval,sysdate-1);                                      commit;                   exception when others then                    rollback;                     dbms_output.put_line('保存到user_fee_info,day_fee_info表出现了异常');                   end;                   -------------(end)保存到user_fee_info,day_fee_info表-------------------------------------                                                   -------------------(begin)保存到user_fee_info,month_fee_info表---------------------------------                   begin                                     begin                  ----首先删除再更新原来的user_fee_info,month_fee_info                   select a.fee_id  into v_fee_id  from month_fee_info a, user_fee_info b where a.fee_id = b.fee_id and b.user_id = base_fee.user_id   and to_char(a.start_time,'yyyy-mm') = to_char(add_months(sysdate,-1),'yyyy-mm');                   delete from user_fee_info x where x.fee_id = v_fee_id;                   delete from month_fee_info y where y.fee_id = v_fee_id;                    commit;                                                         exception when others then                    rollback;                   end;                   ----插入新的数据                   select seq_user_fee_info.nextval into user_fee_info_nextval from dual;                   insert into user_fee_info(fee_id,user_id,fee_base,fee_pkg_month,fee_keep,fee_oth_month,fee_vpn,                   fee_shift,fee_local,fee_long,fee_inprov,fee_inprov_long,fee_outprov,fee_outprov_long,fee_inter,fee_inter_long,                   fee_cmnet,fee_trust,fee_ptp_sms,fee_mms,fee_magazine,fee_gprs,fee_wap,fee_data_month,                   fee_data,fee_ring,fee_display,fee_ext,fee_other,fee_all,fee_for_others,fee_by_others)                   values( user_fee_info_nextval,base_fee.user_id, base_fee.fee_base, base_fee.fee_pkg_month,                   base_fee.fee_keep, base_fee.fee_oth_month, base_fee.fee_vpn,                   base_fee.fee_shift, base_fee.fee_local, base_fee.fee_long, base_fee.fee_inprov,                   base_fee.fee_inprov_long, base_fee.fee_outprov, base_fee.fee_outprov_long,                   base_fee.fee_inter, base_fee.fee_inter_long, base_fee.fee_cmnet,                   base_fee.fee_trust, base_fee.fee_ptp_sms,  base_fee.fee_mms,                   base_fee.fee_magazine,  base_fee.fee_gprs,  base_fee.fee_wap,                   base_fee.fee_data_month,  base_fee.fee_data,  base_fee.fee_ring,                   base_fee.fee_display, base_fee.fee_ext,  base_fee.fee_other,                   base_fee.fee_all,  base_fee.fee_for_others, base_fee.fee_by_others);                                  insert into month_fee_info(id,fee_id,start_time) values(seq_month_fee_info.nextval,user_fee_info_nextval,sysdate-1);                        commit;                   exception when others then                    rollback;                     dbms_output.put_line('保存到user_fee_info,month_fee_info表出现了异常');                   end;                   ----------------(end)保存到user_fee_info,month_fee_info表--------------------------------------                                  else --不是本月第一天                                    -------------------(begin)保存到user_fee_info,day_fee_info表-------------------                   begin                                     begin                  --计算出本月的总和                   select  user_id,                   sum(fee_base),sum(fee_pkg_month),sum(fee_keep),sum(fee_oth_month),sum(fee_vpn),                   sum(fee_shift),sum(fee_local),sum(fee_long),sum(fee_inprov),sum(fee_inprov_long),                   sum(fee_outprov),sum(fee_outprov_long),sum(fee_inter),sum(fee_inter_long),                   sum(fee_cmnet),sum(fee_trust),sum(fee_ptp_sms),sum(fee_mms),sum(fee_magazine),                   sum(fee_gprs),sum(fee_wap),sum(fee_data_month),                   sum(fee_data),sum(fee_ring),sum(fee_display),sum(fee_ext),sum(fee_other),                   sum(fee_all),sum(fee_for_others),sum(fee_by_others)                    into user_fee_info_temp from user_fee_info                   where user_id =  base_fee.user_id                   and fee_id in (select fee_id from day_fee_info where to_char(start_time,'yyyy-mm') = to_char(sysdate,'yyyy-mm'))  group by user_id ;                                      exception when others then                    user_fee_info_temp.user_id := base_fee.user_id;                     user_fee_info_temp.fee_base := 0.00;                     user_fee_info_temp.fee_pkg_month := 0.00;                     user_fee_info_temp.fee_keep := 0.00;                     user_fee_info_temp.fee_oth_month := 0.00;                     user_fee_info_temp.fee_vpn := 0.00;                     user_fee_info_temp.fee_shift := 0.00;                     user_fee_info_temp.fee_local := 0.00;                     user_fee_info_temp.fee_long := 0.00;                     user_fee_info_temp.fee_inprov := 0.00;                     user_fee_info_temp.fee_inprov_long := 0.00;                     user_fee_info_temp.fee_outprov := 0.00;                     user_fee_info_temp.fee_outprov_long := 0.00;                     user_fee_info_temp.fee_inter := 0.00;                     user_fee_info_temp.fee_inter_long := 0.00;                     user_fee_info_temp.fee_cmnet := 0.00;                     user_fee_info_temp.fee_trust := 0.00;                     user_fee_info_temp.fee_ptp_sms := 0.00;                     user_fee_info_temp.fee_mms := 0.00;                     user_fee_info_temp.fee_magazine := 0.00;                     user_fee_info_temp.fee_gprs := 0.00;                     user_fee_info_temp.fee_wap := 0.00;                     user_fee_info_temp.fee_data_month := 0.00;                     user_fee_info_temp.fee_data := 0.00;                     user_fee_info_temp.fee_ring := 0.00;                     user_fee_info_temp.fee_display := 0.00;                     user_fee_info_temp.fee_ext := 0.00;                     user_fee_info_temp.fee_other := 0.00;                     user_fee_info_temp.fee_all := 0.00;                     user_fee_info_temp.fee_for_others := 0.00;                     user_fee_info_temp.fee_by_others := 0.00;                   end;                                   --保存到user_fee_info,day_fee_info表                   select seq_user_fee_info.nextval into user_fee_info_nextval from dual;                   insert into user_fee_info(fee_id,user_id,fee_base,fee_pkg_month,fee_keep,fee_oth_month,fee_vpn,                   fee_shift,fee_local,fee_long,fee_inprov,fee_inprov_long,fee_outprov,fee_outprov_long,fee_inter,fee_inter_long,                   fee_cmnet,fee_trust,fee_ptp_sms,fee_mms,fee_magazine,fee_gprs,fee_wap,fee_data_month,                   fee_data,fee_ring,fee_display,fee_ext,fee_other,fee_all,fee_for_others,fee_by_others)                   values(                   user_fee_info_nextval,base_fee.user_id,                   decode(sign(base_fee.fee_base-user_fee_info_temp.fee_base),1,base_fee.fee_base-user_fee_info_temp.fee_base,0.00),                   decode(sign(base_fee.fee_pkg_month-user_fee_info_temp.fee_pkg_month),1,base_fee.fee_pkg_month-user_fee_info_temp.fee_pkg_month,0.00),                   decode(sign(base_fee.fee_keep-user_fee_info_temp.fee_keep),1,base_fee.fee_keep-user_fee_info_temp.fee_keep,0.00),                    decode(sign(base_fee.fee_oth_month-user_fee_info_temp.fee_oth_month),1,base_fee.fee_oth_month-user_fee_info_temp.fee_oth_month,0.00),                     decode(sign(base_fee.fee_vpn-user_fee_info_temp.fee_vpn),1,base_fee.fee_vpn-user_fee_info_temp.fee_vpn,0.00),                      decode(sign(base_fee.fee_shift-user_fee_info_temp.fee_shift),1,base_fee.fee_shift-user_fee_info_temp.fee_shift,0.00),                       decode(sign(base_fee.fee_local-user_fee_info_temp.fee_local),1,base_fee.fee_local-user_fee_info_temp.fee_local,0.00),                       decode(sign(base_fee.fee_long-user_fee_info_temp.fee_long),1,base_fee.fee_long-user_fee_info_temp.fee_long,0.00),                       decode(sign(base_fee.fee_inprov-user_fee_info_temp.fee_inprov),1,base_fee.fee_inprov-user_fee_info_temp.fee_inprov,0.00),                       decode(sign(base_fee.fee_inprov_long-user_fee_info_temp.fee_inprov_long),1,base_fee.fee_inprov_long-user_fee_info_temp.fee_inprov_long,0.00),                       decode(sign(base_fee.fee_outprov-user_fee_info_temp.fee_outprov),1,base_fee.fee_outprov-user_fee_info_temp.fee_outprov,0.00),                       decode(sign(base_fee.fee_outprov_long-user_fee_info_temp.fee_outprov_long),1,base_fee.fee_outprov_long-user_fee_info_temp.fee_outprov_long,0.00),                       decode(sign(base_fee.fee_inter-user_fee_info_temp.fee_inter),1,base_fee.fee_inter-user_fee_info_temp.fee_inter,0.00),                       decode(sign(base_fee.fee_inter_long-user_fee_info_temp.fee_inter_long),1,base_fee.fee_inter_long-user_fee_info_temp.fee_inter_long,0.00),                        decode(sign(base_fee.fee_cmnet-user_fee_info_temp.fee_cmnet),1,base_fee.fee_cmnet-user_fee_info_temp.fee_cmnet,0.00),                         decode(sign(base_fee.fee_trust-user_fee_info_temp.fee_trust),1,base_fee.fee_trust-user_fee_info_temp.fee_trust,0.00),                          decode(sign(base_fee.fee_ptp_sms-user_fee_info_temp.fee_ptp_sms),1,base_fee.fee_ptp_sms-user_fee_info_temp.fee_ptp_sms,0.00),                           decode(sign(base_fee.fee_mms-user_fee_info_temp.fee_mms),1,base_fee.fee_mms-user_fee_info_temp.fee_mms,0.00),                            decode(sign(base_fee.fee_magazine-user_fee_info_temp.fee_magazine),1,base_fee.fee_magazine-user_fee_info_temp.fee_magazine,0.00),                             decode(sign(base_fee.fee_gprs-user_fee_info_temp.fee_gprs),1,base_fee.fee_gprs-user_fee_info_temp.fee_gprs,0.00),                             decode(sign(base_fee.fee_wap-user_fee_info_temp.fee_wap),1,base_fee.fee_wap-user_fee_info_temp.fee_wap,0.00),                              decode(sign(base_fee.fee_data_month-user_fee_info_temp.fee_data_month),1,base_fee.fee_data_month-user_fee_info_temp.fee_data_month,0.00),                               decode(sign(base_fee.fee_data-user_fee_info_temp.fee_data),1,base_fee.fee_data-user_fee_info_temp.fee_data,0.00),                                 decode(sign(base_fee.fee_ring-user_fee_info_temp.fee_ring),1,base_fee.fee_ring-user_fee_info_temp.fee_ring,0.00),                                  decode(sign(base_fee.fee_display-user_fee_info_temp.fee_display),1,base_fee.fee_display-user_fee_info_temp.fee_display,0.00),                                  decode(sign(base_fee.fee_ext-user_fee_info_temp.fee_ext),1,base_fee.fee_ext-user_fee_info_temp.fee_ext,0.00),                                  decode(sign(base_fee.fee_other-user_fee_info_temp.fee_other),1,base_fee.fee_other-user_fee_info_temp.fee_other,0.00),                                   decode(sign(base_fee.fee_all-user_fee_info_temp.fee_all),1,base_fee.fee_all-user_fee_info_temp.fee_all,0.00),                                   decode(sign(base_fee.fee_for_others-user_fee_info_temp.fee_for_others),1,base_fee.fee_for_others-user_fee_info_temp.fee_for_others,0.00),                                   decode(sign(base_fee.fee_by_others-user_fee_info_temp.fee_by_others),1,base_fee.fee_by_others-user_fee_info_temp.fee_by_others,0.00) );                                   insert into day_fee_info(id,fee_id,start_time) values(seq_day_fee_info.nextval,user_fee_info_nextval,sysdate-1);                                      commit;                   exception when others then                    rollback;                     dbms_output.put_line('保存到user_fee_info,day_fee_info表出现了异常');                   end;                   ------------------(end)保存到user_fee_info,day_fee_info表----------------------------------                                                                                                    ----------------(begin)保存到user_fee_info,month_fee_info表----------------------                   begin                                     begin                  ----首先删除再更新原来的user_fee_info,month_fee_info                                     select a.fee_id  into v_fee_id  from month_fee_info a, user_fee_info b where a.fee_id = b.fee_id and b.user_id = base_fee.user_id   and to_char(a.start_time,'yyyy-mm') = to_char(sysdate,'yyyy-mm') ;                   delete from user_fee_info x where x.fee_id = v_fee_id;                   delete from month_fee_info y where y.fee_id = v_fee_id;                    commit;                   exception when others then                    rollback;                   end;                                                    ----插入新的数据                   select seq_user_fee_info.nextval into user_fee_info_nextval from dual;                   insert into user_fee_info(fee_id,user_id,fee_base,fee_pkg_month,fee_keep,fee_oth_month,fee_vpn,                   fee_shift,fee_local,fee_long,fee_inprov,fee_inprov_long,fee_outprov,fee_outprov_long,fee_inter,fee_inter_long,                   fee_cmnet,fee_trust,fee_ptp_sms,fee_mms,fee_magazine,fee_gprs,fee_wap,fee_data_month,                   fee_data,fee_ring,fee_display,fee_ext,fee_other,fee_all,fee_for_others,fee_by_others)                   values( user_fee_info_nextval,base_fee.user_id, base_fee.fee_base, base_fee.fee_pkg_month,                   base_fee.fee_keep, base_fee.fee_oth_month, base_fee.fee_vpn,                   base_fee.fee_shift, base_fee.fee_local, base_fee.fee_long, base_fee.fee_inprov,                   base_fee.fee_inprov_long, base_fee.fee_outprov, base_fee.fee_outprov_long,                   base_fee.fee_inter, base_fee.fee_inter_long, base_fee.fee_cmnet,                   base_fee.fee_trust, base_fee.fee_ptp_sms,  base_fee.fee_mms,                   base_fee.fee_magazine,  base_fee.fee_gprs,  base_fee.fee_wap,                   base_fee.fee_data_month,  base_fee.fee_data,  base_fee.fee_ring,                   base_fee.fee_display, base_fee.fee_ext,  base_fee.fee_other,                   base_fee.fee_all,  base_fee.fee_for_others, base_fee.fee_by_others);                                  insert into month_fee_info(id,fee_id,start_time) values(seq_month_fee_info.nextval,user_fee_info_nextval,sysdate);                                      commit;                   exception when others then                    rollback;                     dbms_output.put_line('保存到user_fee_info,month_fee_info表出现了异常');                   end;                    ----------------(end)保存到user_fee_info,month_fee_info表----------------------                        end if;                                                                                                end loop;              end if;                                                   exception when others then            --回滚数据             rollback;             dbms_output.put_line('首先通过虚拟号码,获取对应的SIM号码出现了异常!');           end;         end if;                                   --如果是真实号码,并且没有附属虚拟号码,则直接更新day_fee_info,month_fee_info表         if group_sims_info.simtype > 0 and (group_sims_info.groupsim is null or length(group_sims_info.groupsim) = 0 ) then          begin             --首先获取该用户每日消费记录,如果今天刚好是1号,那么获取到的数据刚好是上个月1-30号的总和              --如果不是1号,那么获取到的是本月前几天的总和              pkg_gps_audit.proc_get_userfee(func_get_user_id(group_sims_info.sim),base_fee);                            --判断当前日期是否是每月1号              is_first_day := func_is_first_day();              if is_first_day = 1 then                 ----------------------(begin)-------------------                 begin                               begin                 --计算出上个月的总和                  select  user_id,                  sum(fee_base),sum(fee_pkg_month),sum(fee_keep),sum(fee_oth_month),sum(fee_vpn),                  sum(fee_shift),sum(fee_local),sum(fee_long),sum(fee_inprov),sum(fee_inprov_long),                  sum(fee_outprov),sum(fee_outprov_long),sum(fee_inter),sum(fee_inter_long),                  sum(fee_cmnet),sum(fee_trust),sum(fee_ptp_sms),sum(fee_mms),sum(fee_magazine),                  sum(fee_gprs),sum(fee_wap),sum(fee_data_month),                  sum(fee_data),sum(fee_ring),sum(fee_display),sum(fee_ext),sum(fee_other),                  sum(fee_all),sum(fee_for_others),sum(fee_by_others)                   into user_fee_info_temp from user_fee_info                  where user_id = func_get_user_id(group_sims_info.sim)                  and fee_id in (select fee_id from day_fee_info where to_char(start_time,'yyyy-mm') = to_char(add_months(sysdate,-1),'yyyy-mm'))                    group by user_id ;                                exception when others then                    user_fee_info_temp.user_id := base_fee.user_id;                     user_fee_info_temp.fee_base := 0.00;                     user_fee_info_temp.fee_pkg_month := 0.00;                     user_fee_info_temp.fee_keep := 0.00;                     user_fee_info_temp.fee_oth_month := 0.00;                     user_fee_info_temp.fee_vpn := 0.00;                     user_fee_info_temp.fee_shift := 0.00;                     user_fee_info_temp.fee_local := 0.00;                     user_fee_info_temp.fee_long := 0.00;                     user_fee_info_temp.fee_inprov := 0.00;                     user_fee_info_temp.fee_inprov_long := 0.00;                     user_fee_info_temp.fee_outprov := 0.00;                     user_fee_info_temp.fee_outprov_long := 0.00;                     user_fee_info_temp.fee_inter := 0.00;                     user_fee_info_temp.fee_inter_long := 0.00;                     user_fee_info_temp.fee_cmnet := 0.00;                     user_fee_info_temp.fee_trust := 0.00;                     user_fee_info_temp.fee_ptp_sms := 0.00;                     user_fee_info_temp.fee_mms := 0.00;                     user_fee_info_temp.fee_magazine := 0.00;                     user_fee_info_temp.fee_gprs := 0.00;                     user_fee_info_temp.fee_wap := 0.00;                     user_fee_info_temp.fee_data_month := 0.00;                     user_fee_info_temp.fee_data := 0.00;                     user_fee_info_temp.fee_ring := 0.00;                     user_fee_info_temp.fee_display := 0.00;                     user_fee_info_temp.fee_ext := 0.00;                     user_fee_info_temp.fee_other := 0.00;                     user_fee_info_temp.fee_all := 0.00;                     user_fee_info_temp.fee_for_others := 0.00;                     user_fee_info_temp.fee_by_others := 0.00;                   end;                                --保存到user_fee_info,day_fee_info表                select seq_user_fee_info.nextval into user_fee_info_nextval from dual;                insert into user_fee_info(fee_id,user_id,fee_base,fee_pkg_month,fee_keep,fee_oth_month,fee_vpn,                fee_shift,fee_local,fee_long,fee_inprov,fee_inprov_long,fee_outprov,fee_outprov_long,fee_inter,fee_inter_long,                fee_cmnet,fee_trust,fee_ptp_sms,fee_mms,fee_magazine,fee_gprs,fee_wap,fee_data_month,                fee_data,fee_ring,fee_display,fee_ext,fee_other,fee_all,fee_for_others,fee_by_others)                values(                user_fee_info_nextval,base_fee.user_id,                decode(sign(base_fee.fee_base-user_fee_info_temp.fee_base),1,base_fee.fee_base-user_fee_info_temp.fee_base,0.00),                decode(sign(base_fee.fee_pkg_month-user_fee_info_temp.fee_pkg_month),1,base_fee.fee_pkg_month-user_fee_info_temp.fee_pkg_month,0.00),                decode(sign(base_fee.fee_keep-user_fee_info_temp.fee_keep),1,base_fee.fee_keep-user_fee_info_temp.fee_keep,0.00),                 decode(sign(base_fee.fee_oth_month-user_fee_info_temp.fee_oth_month),1,base_fee.fee_oth_month-user_fee_info_temp.fee_oth_month,0.00),                  decode(sign(base_fee.fee_vpn-user_fee_info_temp.fee_vpn),1,base_fee.fee_vpn-user_fee_info_temp.fee_vpn,0.00),                   decode(sign(base_fee.fee_shift-user_fee_info_temp.fee_shift),1,base_fee.fee_shift-user_fee_info_temp.fee_shift,0.00),                    decode(sign(base_fee.fee_local-user_fee_info_temp.fee_local),1,base_fee.fee_local-user_fee_info_temp.fee_local,0.00),                    decode(sign(base_fee.fee_long-user_fee_info_temp.fee_long),1,base_fee.fee_long-user_fee_info_temp.fee_long,0.00),                    decode(sign(base_fee.fee_inprov-user_fee_info_temp.fee_inprov),1,base_fee.fee_inprov-user_fee_info_temp.fee_inprov,0.00),                    decode(sign(base_fee.fee_inprov_long-user_fee_info_temp.fee_inprov_long),1,base_fee.fee_inprov_long-user_fee_info_temp.fee_inprov_long,0.00),                    decode(sign(base_fee.fee_outprov-user_fee_info_temp.fee_outprov),1,base_fee.fee_outprov-user_fee_info_temp.fee_outprov,0.00),                    decode(sign(base_fee.fee_outprov_long-user_fee_info_temp.fee_outprov_long),1,base_fee.fee_outprov_long-user_fee_info_temp.fee_outprov_long,0.00),                    decode(sign(base_fee.fee_inter-user_fee_info_temp.fee_inter),1,base_fee.fee_inter-user_fee_info_temp.fee_inter,0.00),                    decode(sign(base_fee.fee_inter_long-user_fee_info_temp.fee_inter_long),1,base_fee.fee_inter_long-user_fee_info_temp.fee_inter_long,0.00),                     decode(sign(base_fee.fee_cmnet-user_fee_info_temp.fee_cmnet),1,base_fee.fee_cmnet-user_fee_info_temp.fee_cmnet,0.00),                      decode(sign(base_fee.fee_trust-user_fee_info_temp.fee_trust),1,base_fee.fee_trust-user_fee_info_temp.fee_trust,0.00),                       decode(sign(base_fee.fee_ptp_sms-user_fee_info_temp.fee_ptp_sms),1,base_fee.fee_ptp_sms-user_fee_info_temp.fee_ptp_sms,0.00),                        decode(sign(base_fee.fee_mms-user_fee_info_temp.fee_mms),1,base_fee.fee_mms-user_fee_info_temp.fee_mms,0.00),                         decode(sign(base_fee.fee_magazine-user_fee_info_temp.fee_magazine),1,base_fee.fee_magazine-user_fee_info_temp.fee_magazine,0.00),                          decode(sign(base_fee.fee_gprs-user_fee_info_temp.fee_gprs),1,base_fee.fee_gprs-user_fee_info_temp.fee_gprs,0.00),                          decode(sign(base_fee.fee_wap-user_fee_info_temp.fee_wap),1,base_fee.fee_wap-user_fee_info_temp.fee_wap,0.00),                           decode(sign(base_fee.fee_data_month-user_fee_info_temp.fee_data_month),1,base_fee.fee_data_month-user_fee_info_temp.fee_data_month,0.00),                            decode(sign(base_fee.fee_data-user_fee_info_temp.fee_data),1,base_fee.fee_data-user_fee_info_temp.fee_data,0.00),                              decode(sign(base_fee.fee_ring-user_fee_info_temp.fee_ring),1,base_fee.fee_ring-user_fee_info_temp.fee_ring,0.00),                               decode(sign(base_fee.fee_display-user_fee_info_temp.fee_display),1,base_fee.fee_display-user_fee_info_temp.fee_display,0.00),                               decode(sign(base_fee.fee_ext-user_fee_info_temp.fee_ext),1,base_fee.fee_ext-user_fee_info_temp.fee_ext,0.00),                               decode(sign(base_fee.fee_other-user_fee_info_temp.fee_other),1,base_fee.fee_other-user_fee_info_temp.fee_other,0.00),                                decode(sign(base_fee.fee_all-user_fee_info_temp.fee_all),1,base_fee.fee_all-user_fee_info_temp.fee_all,0.00),                                decode(sign(base_fee.fee_for_others-user_fee_info_temp.fee_for_others),1,base_fee.fee_for_others-user_fee_info_temp.fee_for_others,0.00),                                decode(sign(base_fee.fee_by_others-user_fee_info_temp.fee_by_others),1,base_fee.fee_by_others-user_fee_info_temp.fee_by_others,0.00) );                                insert into day_fee_info(id,fee_id,start_time) values(seq_day_fee_info.nextval,user_fee_info_nextval,sysdate-1);                                commit;                exception when others then                 rollback;                  dbms_output.put_line('保存到user_fee_info,day_fee_info表出现了异常');                end;                ------------------(end)-------------------------------                                                 -------------------(begin)-----------------------------------------                begin                               --保存到user_fee_info,month_fee_info表                begin                 ----首先删除再更新原来的user_fee_info,month_fee_info                                       select a.fee_id into v_fee_id  from month_fee_info a, user_fee_info b where a.fee_id = b.fee_id and b.user_id = base_fee.user_id   and to_char(a.start_time,'yyyy-mm') = to_char(add_months(sysdate,-1),'yyyy-mm') ;                   delete from user_fee_info x where x.fee_id = v_fee_id;                   delete from month_fee_info y where y.fee_id = fee_id;                   commit;                                                       exception when others then                 rollback;                end;                                ----插入新的数据                select seq_user_fee_info.nextval into user_fee_info_nextval from dual;                insert into user_fee_info(fee_id,user_id,fee_base,fee_pkg_month,fee_keep,fee_oth_month,fee_vpn,                fee_shift,fee_local,fee_long,fee_inprov,fee_inprov_long,fee_outprov,fee_outprov_long,fee_inter,fee_inter_long,                fee_cmnet,fee_trust,fee_ptp_sms,fee_mms,fee_magazine,fee_gprs,fee_wap,fee_data_month,                fee_data,fee_ring,fee_display,fee_ext,fee_other,fee_all,fee_for_others,fee_by_others)                values( user_fee_info_nextval,base_fee.user_id, base_fee.fee_base, base_fee.fee_pkg_month,                base_fee.fee_keep, base_fee.fee_oth_month, base_fee.fee_vpn,                base_fee.fee_shift, base_fee.fee_local, base_fee.fee_long, base_fee.fee_inprov,                base_fee.fee_inprov_long, base_fee.fee_outprov, base_fee.fee_outprov_long,                base_fee.fee_inter, base_fee.fee_inter_long, base_fee.fee_cmnet,                base_fee.fee_trust, base_fee.fee_ptp_sms,  base_fee.fee_mms,                base_fee.fee_magazine,  base_fee.fee_gprs,  base_fee.fee_wap,                base_fee.fee_data_month,  base_fee.fee_data,  base_fee.fee_ring,                base_fee.fee_display, base_fee.fee_ext,  base_fee.fee_other,                base_fee.fee_all,  base_fee.fee_for_others, base_fee.fee_by_others);                               insert into month_fee_info(id,fee_id,start_time) values(seq_month_fee_info.nextval,user_fee_info_nextval,sysdate-1);                     commit;                exception when others then                 rollback;                  dbms_output.put_line('保存到user_fee_info,month_fee_info表出现了异常');                end;                ----------------------(end)-----------------------------------------------                                else --不是本月第一天                ------------------------(begin)-------------------------------------                begin               --保存到user_fee_info,day_fee_info表                                begin               --计算出本月的总和                  select  user_id,                  sum(fee_base),sum(fee_pkg_month),sum(fee_keep),sum(fee_oth_month),sum(fee_vpn),                  sum(fee_shift),sum(fee_local),sum(fee_long),sum(fee_inprov),sum(fee_inprov_long),                  sum(fee_outprov),sum(fee_outprov_long),sum(fee_inter),sum(fee_inter_long),                  sum(fee_cmnet),sum(fee_trust),sum(fee_ptp_sms),sum(fee_mms),sum(fee_magazine),                  sum(fee_gprs),sum(fee_wap),sum(fee_data_month),                  sum(fee_data),sum(fee_ring),sum(fee_display),sum(fee_ext),sum(fee_other),                  sum(fee_all),sum(fee_for_others),sum(fee_by_others)                   into user_fee_info_temp from user_fee_info                  where user_id = func_get_user_id(group_sims_info.sim)                  and fee_id in (select fee_id from day_fee_info where to_char(start_time,'yyyy-mm') = to_char(sysdate,'yyyy-mm'))                   group by user_id ;                                  exception when others then                    user_fee_info_temp.user_id := base_fee.user_id;                                          user_fee_info_temp.fee_base := 0.00;                     user_fee_info_temp.fee_pkg_month := 0.00;                     user_fee_info_temp.fee_keep := 0.00;                     user_fee_info_temp.fee_oth_month := 0.00;                     user_fee_info_temp.fee_vpn := 0.00;                     user_fee_info_temp.fee_shift := 0.00;                     user_fee_info_temp.fee_local := 0.00;                     user_fee_info_temp.fee_long := 0.00;                     user_fee_info_temp.fee_inprov := 0.00;                     user_fee_info_temp.fee_inprov_long := 0.00;                     user_fee_info_temp.fee_outprov := 0.00;                     user_fee_info_temp.fee_outprov_long := 0.00;                     user_fee_info_temp.fee_inter := 0.00;                     user_fee_info_temp.fee_inter_long := 0.00;                     user_fee_info_temp.fee_cmnet := 0.00;                     user_fee_info_temp.fee_trust := 0.00;                     user_fee_info_temp.fee_ptp_sms := 0.00;                     user_fee_info_temp.fee_mms := 0.00;                     user_fee_info_temp.fee_magazine := 0.00;                     user_fee_info_temp.fee_gprs := 0.00;                     user_fee_info_temp.fee_wap := 0.00;                     user_fee_info_temp.fee_data_month := 0.00;                     user_fee_info_temp.fee_data := 0.00;                     user_fee_info_temp.fee_ring := 0.00;                     user_fee_info_temp.fee_display := 0.00;                     user_fee_info_temp.fee_ext := 0.00;                     user_fee_info_temp.fee_other := 0.00;                     user_fee_info_temp.fee_all := 0.00;                     user_fee_info_temp.fee_for_others := 0.00;                     user_fee_info_temp.fee_by_others := 0.00;                   end;                                   --保存到user_fee_info,day_fee_info表                select seq_user_fee_info.nextval into user_fee_info_nextval from dual;                insert into user_fee_info(fee_id,user_id,fee_base,fee_pkg_month,fee_keep,fee_oth_month,fee_vpn,                fee_shift,fee_local,fee_long,fee_inprov,fee_inprov_long,fee_outprov,fee_outprov_long,fee_inter,fee_inter_long,                fee_cmnet,fee_trust,fee_ptp_sms,fee_mms,fee_magazine,fee_gprs,fee_wap,fee_data_month,                fee_data,fee_ring,fee_display,fee_ext,fee_other,fee_all,fee_for_others,fee_by_others)                values(                user_fee_info_nextval,base_fee.user_id,                decode(sign(base_fee.fee_base-user_fee_info_temp.fee_base),1,base_fee.fee_base-user_fee_info_temp.fee_base,0.00),                decode(sign(base_fee.fee_pkg_month-user_fee_info_temp.fee_pkg_month),1,base_fee.fee_pkg_month-user_fee_info_temp.fee_pkg_month,0.00),                decode(sign(base_fee.fee_keep-user_fee_info_temp.fee_keep),1,base_fee.fee_keep-user_fee_info_temp.fee_keep,0.00),                 decode(sign(base_fee.fee_oth_month-user_fee_info_temp.fee_oth_month),1,base_fee.fee_oth_month-user_fee_info_temp.fee_oth_month,0.00),                  decode(sign(base_fee.fee_vpn-user_fee_info_temp.fee_vpn),1,base_fee.fee_vpn-user_fee_info_temp.fee_vpn,0.00),                   decode(sign(base_fee.fee_shift-user_fee_info_temp.fee_shift),1,base_fee.fee_shift-user_fee_info_temp.fee_shift,0.00),                    decode(sign(base_fee.fee_local-user_fee_info_temp.fee_local),1,base_fee.fee_local-user_fee_info_temp.fee_local,0.00),                    decode(sign(base_fee.fee_long-user_fee_info_temp.fee_long),1,base_fee.fee_long-user_fee_info_temp.fee_long,0.00),                    decode(sign(base_fee.fee_inprov-user_fee_info_temp.fee_inprov),1,base_fee.fee_inprov-user_fee_info_temp.fee_inprov,0.00),                    decode(sign(base_fee.fee_inprov_long-user_fee_info_temp.fee_inprov_long),1,base_fee.fee_inprov_long-user_fee_info_temp.fee_inprov_long,0.00),                    decode(sign(base_fee.fee_outprov-user_fee_info_temp.fee_outprov),1,base_fee.fee_outprov-user_fee_info_temp.fee_outprov,0.00),                    decode(sign(base_fee.fee_outprov_long-user_fee_info_temp.fee_outprov_long),1,base_fee.fee_outprov_long-user_fee_info_temp.fee_outprov_long,0.00),                    decode(sign(base_fee.fee_inter-user_fee_info_temp.fee_inter),1,base_fee.fee_inter-user_fee_info_temp.fee_inter,0.00),                    decode(sign(base_fee.fee_inter_long-user_fee_info_temp.fee_inter_long),1,base_fee.fee_inter_long-user_fee_info_temp.fee_inter_long,0.00),                     decode(sign(base_fee.fee_cmnet-user_fee_info_temp.fee_cmnet),1,base_fee.fee_cmnet-user_fee_info_temp.fee_cmnet,0.00),                      decode(sign(base_fee.fee_trust-user_fee_info_temp.fee_trust),1,base_fee.fee_trust-user_fee_info_temp.fee_trust,0.00),                       decode(sign(base_fee.fee_ptp_sms-user_fee_info_temp.fee_ptp_sms),1,base_fee.fee_ptp_sms-user_fee_info_temp.fee_ptp_sms,0.00),                        decode(sign(base_fee.fee_mms-user_fee_info_temp.fee_mms),1,base_fee.fee_mms-user_fee_info_temp.fee_mms,0.00),                         decode(sign(base_fee.fee_magazine-user_fee_info_temp.fee_magazine),1,base_fee.fee_magazine-user_fee_info_temp.fee_magazine,0.00),                          decode(sign(base_fee.fee_gprs-user_fee_info_temp.fee_gprs),1,base_fee.fee_gprs-user_fee_info_temp.fee_gprs,0.00),                          decode(sign(base_fee.fee_wap-user_fee_info_temp.fee_wap),1,base_fee.fee_wap-user_fee_info_temp.fee_wap,0.00),                           decode(sign(base_fee.fee_data_month-user_fee_info_temp.fee_data_month),1,base_fee.fee_data_month-user_fee_info_temp.fee_data_month,0.00),                            decode(sign(base_fee.fee_data-user_fee_info_temp.fee_data),1,base_fee.fee_data-user_fee_info_temp.fee_data,0.00),                              decode(sign(base_fee.fee_ring-user_fee_info_temp.fee_ring),1,base_fee

 

转载于:https://www.cnblogs.com/yuan-jun/p/6600161.html

你可能感兴趣的文章
红黑树原理、AVL树区别
查看>>
MySQL->索引的维护[20180504]
查看>>
第三章知识梳理
查看>>
在windows下安装dig工具
查看>>
django返回json格式的数据的方法
查看>>
Python使用struct处理二进制(pack和unpack用法)
查看>>
Enterprise Library6.0之缓存模块
查看>>
Red and Black
查看>>
ACM学习历程—HDU5667 Sequence(数论 && 矩阵乘法 && 快速幂)
查看>>
Vue-cli 工具 / 通过 Vue-cli 工具重构 todoList
查看>>
如何用js实现页面跳转
查看>>
数据库重点复习(sql基础语句,游标,索引,视图)
查看>>
算法导论之堆排序
查看>>
特殊条件的二分查找
查看>>
【Python实践-2】求一个或多个数的乘积
查看>>
Silverlight之InitParams
查看>>
Apache vs Lighttpd vs Nginx对比
查看>>
[SDOI2010]古代猪文 (欧拉,卢卡斯,中国剩余)
查看>>
地理入门-经纬度时区速成总结篇(转)
查看>>
获取url参数和rem屏幕适配
查看>>