• oracle 集合变量以及自定义异常的用法


    oracle 集合变量以及自定义异常的用法,

    在过程 record_practice 有record变量和自定义异常的用法实例。具体在3284行。

       1 CREATE OR REPLACE Package Pkg_Weiyl Is
       2   Pkg_Name  Constant Varchar2(20) := 'pkg_weiyl';
       3   Too_Young Constant Number := -20001;
       4   Exc_Too_Young Exception;
       5   Pragma Exception_Init(Exc_Too_Young, -20001);
       6   Procedure Updateaae140(Pi_Aac002 In Varchar2,
       7                          Pi_Aae140 In Varchar2,
       8                          Po_Fhz    Out Varchar2,
       9                          Po_Msg    Out Varchar2);
      10   Procedure Updateidcard(Pi_Bae007     In Varchar2,
      11                          Pi_Flag       In Varchar2,
      12                          Pi_Aac002     In Varchar2,
      13                          Pi_Aac002_New In Varchar2,
      14                          Pi_Aae013     In Varchar2,
      15                          Pi_Aae011     In Varchar2,
      16                          Pi_Bae001     In Varchar2,
      17                          Po_Fhz        Out Varchar2,
      18                          Po_Msg        Out Varchar2);
      19   Procedure Cancelupdate(Pi_Bae007 In Varchar2,
      20                          Po_Fhz    Out Varchar2,
      21                          Po_Msg    Out Varchar2);
      22   Procedure Updateidfh(Pi_Bae007 In Varchar2,
      23                        Pi_Aae012 In Varchar2,
      24                        Po_Fhz    Out Varchar2,
      25                        Po_Msg    Out Varchar2);
      26   Procedure Validateidcard(Pi_Aac001     In Number,
      27                            Pi_Aac002_New In Varchar2,
      28                            Po_Fhz        Out Varchar2,
      29                            Po_Msg        Out Varchar2);
      30   Procedure Vali_Idcard_Lenandchar(Pi_Aac002 In Varchar2,
      31                                    Po_Fhz    Out Varchar2,
      32                                    Po_Msg    Out Varchar2);
      33   Procedure Updateidcard_Fortest(Pi_Aac002     In Varchar2,
      34                                  Pi_Aac002_New In Varchar2,
      35                                  Pi_Aae013     In Varchar2,
      36                                  Pi_Aae011     In Varchar2,
      37                                  Pi_Bae001     In Varchar2,
      38                                  Po_Fhz        Out Varchar2,
      39                                  Po_Msg        Out Varchar2);
      40   --截取字符串 split_type 是自己建的类型  CREATE or replace type split_comma is table of varchar2(4000);
      41   -- 取出字符串的方法 : select column_value from table (pkg_weiyl.split_dh('dd,aa,134'));
      42   Function Split_Dh(p_Str       In Varchar2,
      43                     p_Delimiter In Varchar2 Default (',') --分隔符,默认逗号  
      44                     ) Return Split_Type;
      45 
      46   Function Func_Wyl(Pi_Aaa100 Varchar2, Pi_Aaa102 Varchar2)
      47   --字典转换,把代码值转换成对应的可理解的中文,卫永乐,20141105
      48    Return Varchar2;
      49   Function Func_Check_Para(Pi_Aab999 In Varchar2,
      50                            Pi_Pch    In Varchar2,
      51                            Pi_Aae001 In Number,
      52                            Pi_Aae036 In Varchar2,
      53                            Pi_Aac027 In Number)
      54   /*拼接where条件 过程 check_sdnmdc 的游标的where条件*/
      55    Return Varchar2;
      56 
      57   /* 
      58      added 20160801 
      59     获取月份差值,主要针对于转移统计的
      60   */
      61   function getMonthNum(pi_ksyf   in number,
      62                        pi_zzyf   in number,
      63                        pi_aae180 in number) return number;
      64 
      65   Procedure Xjyyzf(Pi_Bae007 In Varchar2,
      66                    Pi_Operid In Varchar2,
      67                    Pi_Aae037 In Varchar2,
      68                    Pi_Aae038 In Varchar2,
      69                    Po_Fhz    Out Varchar2,
      70                    Po_Msg    Out Varchar2);
      71   --- 循环调用的过程,解决每次都要自己写一个declare plsql代码块,
      72   --入参:
      73   Procedure Prc_Xunhuan(Pi_Prcname In Varchar2, --要调用的过程名
      74                         Pi_Tabname In Varchar2, --cursor取值的表
      75                         Po_Fhz     Out Varchar2,
      76                         Po_Msg     Out Varchar2);
      77   Procedure Xjyyzf_Callback(Pi_Bae007 In Varchar2,
      78                             Pi_Operid In Varchar2,
      79                             Po_Fhz    Out Varchar2,
      80                             Po_Msg    Out Varchar2);
      81   Procedure Xjyyzfqx(Pi_Bae007 In Varchar2,
      82                      Po_Fhz    Out Varchar2,
      83                      Po_Msg    Out Varchar2);
      84   -- 添加自治事务
      85   Procedure Autonomous_Tran(Pi_Aac001 In Varchar2,
      86                             Po_Fhz    Out Varchar2,
      87                             Po_Msg    Out Varchar2);
      88   /*手工添加表级锁,使用场景,如果要操作一张大表的大部分数据,
      89     如果不加表级锁,那么就会耗费大量的资源,这种情况下可以使用
      90     手工给表加锁,释放方式 rollback,或者commit
      91   */
      92   Procedure Update_Ac02_Aae140(Pi_Aae140 In Varchar2,
      93                                Pi_Fhz    Out Varchar2,
      94                                Po_Msg    Out Varchar2);
      95 
      96   Procedure Querycheck(Pi_Aac002 In Varchar2,
      97                        Pi_Aac003 In Varchar2,
      98                        Po_Fhz    Out Varchar2,
      99                        Po_Msg    Out Varchar2);
     100 
     101   Procedure Check_Ac02(Pi_Aac002 In Varchar2,
     102                        Po_Aac001 Out Number,
     103                        Po_Cac012 Out Varchar2,
     104                        Po_Aab001 Out Varchar2,
     105                        Po_Fhz    Out Varchar2,
     106                        Po_Msg    Out Varchar2);
     107   Procedure Check_Skc84(Pi_Aac001 In Varchar2,
     108                         Po_Fhz    Out Varchar2,
     109                         Po_Msg    Out Varchar2);
     110   Procedure Check_Sdnmdcc(Pi_Aab999 In Varchar2,
     111                           PI_PCH    in varchar2,
     112                           Po_Fhz    Out Varchar2,
     113                           Po_Msg    Out Varchar2);
     114   Procedure Check_Sdnmdc(Pi_Bae001 In Varchar2,
     115                          Pi_Aab999 In Varchar2,
     116                          Pi_Pch    In Varchar2,
     117                          /* PI_GLT   in varchar2,*/
     118                          Pi_Aae001 In Varchar2,
     119                          Pi_Aae036 In Varchar2,
     120                          Pi_Aac027 In Varchar2,
     121                          Pi_Bzw    In Varchar2,
     122                          Pi_Oper   In Varchar2,
     123                          Po_Fhz    Out Varchar2,
     124                          Po_Msg    Out Varchar2);
     125   Procedure Check_Sdnmdc_Multi(Pi_Bae001 In Varchar2,
     126                                Pi_Aab999 In Varchar2,
     127                                Pi_Pch    In Varchar2,
     128                                /* PI_GLT   in varchar2,*/
     129                                Pi_Aae001 In Varchar2,
     130                                Pi_Aae036 In Varchar2,
     131                                Pi_Aac027 In Varchar2,
     132                                Pi_Bzw    In Varchar2,
     133                                Pi_Oper   In Varchar2,
     134                                Po_Fhz    Out Varchar2,
     135                                Po_Msg    Out Varchar2);
     136   Procedure Updatekbb5(Pi_Bae007 In Varchar2,
     137                        Pi_Ckz545 In Varchar2,
     138                        Pi_Ckb626 In Varchar2,
     139                        Pi_Ckb627 In Varchar2,
     140                        Pi_Ckb629 In Varchar2,
     141                        Pi_Ckb630 In Varchar2,
     142                        Po_Fhz    Out Varchar2,
     143                        Po_Msg    Out Varchar2);
     144   Procedure Getaaz601(Pi_Rc     In Varchar2,
     145                       po_aaz601 out number,
     146                       Po_Fhz    Out Varchar2,
     147                       Po_Msg    Out Varchar2);
     148   Procedure Insertfw_Zsk(PI_AAA200 in varchar2,
     149                          Pi_Aae202 In Varchar2,
     150                          Pi_Aaa203 In Varchar2,
     151                          Pi_Aae008 In Varchar2,
     152                          PI_AAE011 IN VARCHAR2,
     153                          PI_AAE906 IN VARCHAR2,
     154                          PI_BZ     IN VARCHAR2,
     155                          Po_Fhz    Out Varchar2,
     156                          Po_Msg    Out Varchar2);
     157   /*拼接两个字符串,练手嵌套存储过程*/
     158   procedure testNestedPro(pi_xing   in varchar2,
     159                           pi_ming   in varchar2,
     160                           pi_aab001 in number,
     161                           po_fhz    out varchar2,
     162                           po_msg    out varchar2);
     163   /*触摸屏查询标记*/
     164   procedure cancelCmp(PI_SERIALNUM in varchar2,
     165                       po_fhz       out varchar2,
     166                       po_msg       out varchar2);
     167   /*取消征集通知单*/
     168   procedure cancelAaz288(PI_OPERID in varchar2,
     169                          PI_AAZ288 in varchar2,
     170                          po_fhz    out varchar2,
     171                          po_msg    out varchar2);
     172   /*删除知识库核销的附件内容,否则数据里的不必要的附件会越来越多*/
     173   procedure deleteZskFile(PI_CAE232 in varchar2,
     174                           po_fhz    out varchar2,
     175                           po_msg    out varchar2);
     176   procedure generatexmmx(pi_ksrq in varchar2,
     177                          pi_zzrq in varchar2,
     178                          po_fhz  out varchar2,
     179                          po_msg  out varchar2);
     180   procedure rebuild_sic86(pi_aac001 in varchar2,
     181                           po_fhz    out varchar2,
     182                           po_msg    out varchar2);
     183   procedure rebuild_ab07(pi_aab001 in varchar2,
     184                          pi_ksny   in varchar2,
     185                          pi_zzny   in varchar2,
     186                          pi_aae140 in varchar2,
     187                          po_fhz    out varchar2,
     188                          po_msg    out varchar2);
     189 
     190   /*Pkg_Ryhb_Pl_New   
     191   --批量合并,初始数据生成
     192   Procedure Plhb_Start(Pi_Bae001 In Varchar2,
     193                        Pi_Aab001 In Number,
     194                        Pi_Jbr    In Varchar2,
     195                        Po_Fhz    Out Varchar2,
     196                        Po_Msg    Out Varchar2)
     197   */
     198   procedure generate_plhb_data(pi_bae001 in varchar2,
     199                                po_fhz    out varchar2,
     200                                po_msg    out varchar2);
     201   procedure queryZSK(PI_AAE906 in varchar2,
     202                      PO_AAE202 out varchar2,
     203                      PO_AAE008 out varchar2,
     204                      po_fhz    out varchar2,
     205                      po_msg    out varchar2);
     206   /*
     207   生成失地农民汇总数据
     208   by weiyongel 20160519
     209   */
     210   procedure generate_sdnmhzsj(PI_BAE001 in varchar2,
     211                               po_fhz    out varchar2,
     212                               po_msg    out varchar2);
     213   /*
     214   生成失地农民清理数据
     215   by weiyongel 20160519
     216   */
     217   procedure generate_sdnmqlsj(PI_BAE001 in varchar2,
     218                               po_fhz    out varchar2,
     219                               po_msg    out varchar2);
     220   /*生成失地农民数据清理后的变化字段,用于查询失地农民数据清理模块*/
     221   procedure generate_sdnmdatachange(PI_AAC001 in varchar2,
     222                                     PI_AAZ288 in varchar2,
     223                                     PO_FHZ    out varchar2,
     224                                     PO_MSG    out varchar2);
     225   /*检查ac35时间 ,增减员时用*/
     226   procedure checkAC35Tim(PI_AAC002 in varchar2,
     227                          pi_aab999 in varchar2,
     228                          Po_AAE042 OUT varchar2,
     229                          PO_FHZ    out varchar2,
     230                          PO_MSG    out varchar2);
     231   /* 重新统计ac43 aae002 ,20160526 */
     232   procedure cxtj_ac43(PI_AAB001 in varchar2,
     233                       PO_FHZ    out varchar2,
     234                       PO_MSG    out varchar2);
     235   procedure getAAC027(PI_AAC002 in varchar2,
     236                       PO_AAC027 OUT varchar2,
     237                       PO_FHZ    out varchar2,
     238                       PO_MSG    out varchar2);
     239   /* for test ,20160530 */
     240   procedure myInsert(PI_AAC002 in varchar2,
     241                      PO_FHZ    out varchar2,
     242                      PO_MSG    out varchar2);
     243   /*统计 社会保险参保情况查询 */
     244   procedure tongji_shbx_old(PI_AAC001 in varchar2,
     245                             PO_FHZ    out varchar2,
     246                             PO_MSG    out varchar2);
     247 
     248   /*统计 社会保险参保情况查询 2016081 */
     249   procedure tongji_shbx(PI_AAC001 in varchar2,
     250                         PO_FHZ    out varchar2,
     251                         PO_MSG    out varchar2);
     252 
     253   /*批量赋权限,我自己的权限放在表 fw_operator2right_wyl_ 中 */
     254   procedure prc_right(pi_loginid       in varchar2,
     255                       pi_loginid_other in varchar2,
     256                       po_fhz           out varchar2,
     257                       po_msg           out varchar2);
     258 
     259   /* 测试goto 的用法 */
     260   procedure test_loop_go(pi_aab001 in number,
     261                          po_fhz    out varchar2,
     262                          po_msg    out varchar2);
     263   /*
     264      集合变量
     265   */
     266   procedure record_practice(pi_aac001 in number,
     267                             po_fhz    out varchar2,
     268                             po_msg    out varchar2);
     269 
     270 End Pkg_Weiyl;
     271 /
     272 CREATE OR REPLACE Package Body Pkg_Weiyl Is
     273   c_Pkg_Name Constant Varchar2(20) := 'PKG_WEIYL';
     274   --修改险种
     275   Procedure Updateaae140(Pi_Aac002 In Varchar2,
     276                          Pi_Aae140 In Varchar2,
     277                          Po_Fhz    Out Varchar2,
     278                          Po_Msg    Out Varchar2) Is
     279     v_Count Number(2);
     280   Begin
     281     Po_Fhz := '1';
     282     Po_Msg := '成功';
     283     Select Count(*) Into v_Count From Sab11 Where Bcc347 = Pi_Aac002;
     284     If v_Count > 0 Then
     285       Update Ac02
     286          Set Aac008 = '2'
     287        Where Aae140 = '342'
     288          And Aac001 = (Select Aac001
     289                          From Ac01
     290                         Where Aac002 = Pi_Aac002
     291                           And Aae140 = Pi_Aae140);
     292     End If;
     293   Exception
     294     When No_Data_Found Then
     295       Po_Fhz := '0';
     296       Po_Msg := '失败';
     297   End Updateaae140;
     298 
     299   --修改身份证号
     300   Procedure Updateidcard(Pi_Bae007     In Varchar2,
     301                          Pi_Flag       In Varchar2,
     302                          Pi_Aac002     In Varchar2,
     303                          Pi_Aac002_New In Varchar2,
     304                          Pi_Aae013     In Varchar2,
     305                          Pi_Aae011     In Varchar2,
     306                          Pi_Bae001     In Varchar2,
     307                          Po_Fhz        Out Varchar2,
     308                          Po_Msg        Out Varchar2) Is
     309     v_Aac001     Ac02.Aac001%Type;
     310     v_Prc        Varchar2(20);
     311     v_Aab001     Ac02.Aab001%Type;
     312     v_Yl_Count   Number(2); --养老待遇记录数
     313     v_Msg        Varchar2(200);
     314     v_Aaa076     Ac60.Aaa076%Type;
     315     v_Prcname    Varchar2(200);
     316     v_Params     Varchar2(500);
     317     v_Sqlerrm    Varchar2(500);
     318     v_Aac003     Ac01.Aac003%Type;
     319     v_Aac002_Tmp Ac01.Aac002%Type;
     320   Begin
     321     -- 初始化返回值
     322     Po_Fhz    := '1';
     323     Po_Msg    := '';
     324     v_Prc     := '.updateIDCard';
     325     v_Prcname := c_Pkg_Name || v_Prc;
     326     v_Params  := ',传入参数为:pi_aac002=' || Pi_Aac002 || ',pi_aac002_new=' ||
     327                  Pi_Aac002_New || ',pi_aae013=' || Pi_Aae013 ||
     328                  ',pi_aae011=' || Pi_Aae011 || ',pi_bae001=' || Pi_Bae001;
     329     Select Aac001, Aab001
     330       Into v_Aac001, v_Aab001
     331       From Ac01
     332      Where Aac002 = Pi_Aac002;
     333     -- 调用校验过程进行判断
     334     Validateidcard(v_Aac001, Pi_Aac002_New, Po_Fhz, Po_Msg);
     335     If Po_Fhz <> '1' Then
     336       Return;
     337     End If;
     338   
     339     -- 先做 是否有养老待遇的判断,如果有就直接返回,不更新ac01.aac002
     340     Select Count(1) Into v_Yl_Count From Ac60 Where Aac001 = v_Aac001;
     341     If v_Yl_Count > 0 Then
     342       -- 如果有养老待遇,那么抛出更详细的结果,以便于前台更容易理解
     343       -- 只取第一条
     344       Select Aaa076
     345         Into v_Aaa076
     346         From Ac60
     347        Where Aac001 = v_Aac001
     348          And Rownum = 1;
     349       Select Func_Wyl('AAA076', v_Aaa076) Into v_Msg From Dual;
     350       Po_Fhz := '-2';
     351       Po_Msg := v_Prcname || '执行失败,该人员存在养老待遇类型为 "' || v_Msg ||
     352                 '" 的养老待遇,且待遇状态正常,因此不能更新身份证';
     353       Return;
     354     End If;
     355     -- 更新ac01.AAC002
     356     Begin
     357       -- 根据传入的标志来判断是该笔业务是改成正确身份证还是改成错误身份证,
     358       If (Pi_Flag = '0') Then
     359         /*v_aac002_tmp := BXGX_SEQ_aac002_tmp.Nextval||substr(pi_aac002,7,length(pi_aac002)-6);*/
     360         v_Aac002_Tmp := Pi_Aac002_New;
     361       Else
     362         v_Aac002_Tmp := Pi_Aac002_New;
     363       End If;
     364       Update Ac01 Set Aac002 = v_Aac002_Tmp Where Aac001 = v_Aac001;
     365     Exception
     366       When Others Then
     367         v_Sqlerrm := Substr(Sqlerrm, 1, 9);
     368         /* 捕获,唯一性约束冲突*/
     369         If v_Sqlerrm = 'ORA-00001' Then
     370           Select Aac003
     371             Into v_Aac003
     372             From Ac01
     373            Where Aac002 = Pi_Aac002_New;
     374           Po_Fhz := v_Prcname || '_-3';
     375           Po_Msg := '系统里已经存在身份证为' || Pi_Aac002_New || '的参保人了,姓名:' ||
     376                     v_Aac003 || ',因此不能修改';
     377         Elsif v_Sqlerrm <> 'ORA-00001' Then
     378           /*SQLERRM=ORA-00001*/
     379           /*没法成功捕捉到sqlerrm*/
     380           Po_Msg := Pkg_Fun.f_Errmsg(v_Prcname, Sqlcode, Sqlerrm, v_Params);
     381           Po_Fhz := v_Prcname || '_94';
     382         End If;
     383       
     384         --po_msg := pkg_fun.F_ERRMSG(v_prcName,sqlcode,sqlerrm,v_params);
     385         --po_fhz := v_prcName||'_91';
     386         Return;
     387     End;
     388     Insert Into Ac25
     389       (Aaz163,
     390        Bae001,
     391        Aab001,
     392        Aac001,
     393        Cae129,
     394        Aac050,
     395        Aae160,
     396        Cac038,
     397        Bae007,
     398        Aae011,
     399        Aae036,
     400        Bce326,
     401        Aae012,
     402        Bhe949,
     403        Cae030,
     404        Cae031,
     405        Aae013,
     406        Aac002,
     407        Aac002_New)
     408     Values
     409       (Seq_Bxgx_Aaz163.Nextval, --使用原来的序列号
     410        Pi_Bae001,
     411        v_Aab001,
     412        v_Aac001,
     413        To_Char(Sysdate, 'yyyymm'),
     414        '50', -- 50,变更类型为 修改资料
     415        '1933', -- 1933,变更原因, 其它
     416        '',
     417        /*seq_ac25_bae007.nextval,*/ -- 业务流水号
     418        Pi_Bae007,
     419        Pi_Aae011,
     420        To_Char(Sysdate, 'yyyymmddhh24miss'),
     421        '0',
     422        '',
     423        To_Char(Sysdate, 'yyyymmddhh24miss'),
     424        '',
     425        '',
     426        Pi_Aae013,
     427        Pi_Aac002,
     428        v_Aac002_Tmp);
     429     Update Ac01 Set Aac002 = Pi_Aac002 Where Aac002 = v_Aac002_Tmp;
     430   Exception
     431     When No_Data_Found Then
     432       -- Sqlcode, Sqlerrm
     433       Po_Fhz := '-1';
     434       Po_Msg := '过程' || Pkg_Name || v_Prc || '报错,ac01表里没有找到该人员';
     435   End Updateidcard;
     436 
     437   Procedure Cancelupdate(Pi_Bae007 In Varchar2,
     438                          Po_Fhz    Out Varchar2,
     439                          Po_Msg    Out Varchar2) Is
     440     v_Aac002  Ac01.Aac002%Type;
     441     v_Aac002y Ac25.Aac002%Type;
     442   Begin
     443     -- 初始化返回值
     444   
     445     Po_Fhz := '-1';
     446     Po_Msg := '退单失败';
     447     Select a.Aac002_New
     448       Into v_Aac002
     449       From Ac25 a
     450      Where a.Bae007 = Pi_Bae007;
     451     Select a.Aac002 Into v_Aac002y From Ac25 a Where a.Bae007 = Pi_Bae007;
     452     -- 更新复核标志
     453     update ac25 set bce326 = '9' where bae007 = Pi_Bae007;
     454     Begin
     455       Update Ac01 Set Aac002 = v_Aac002y Where Aac002 = v_Aac002;
     456       Po_Fhz := '1';
     457       Po_Msg := '成功';
     458     Exception
     459       When Others Then
     460         Po_Fhz := '-2';
     461         Po_Msg := '退单失败2';
     462     End;
     463   
     464   End;
     465 
     466   Procedure Updateidfh(Pi_Bae007 In Varchar2,
     467                        Pi_Aae012 In Varchar2,
     468                        Po_Fhz    Out Varchar2,
     469                        Po_Msg    Out Varchar2) Is
     470     v_aac002 ac01.aac002%type;
     471     v_cnt    number(2);
     472   Begin
     473     -- 初始化返回值
     474     Po_Fhz := '-1';
     475     Po_Msg := '添加复核人';
     476     Begin
     477       Update Ac25
     478          Set Aae012 = Pi_Aae012, Bce326 = '1'
     479        Where Bae007 = Pi_Bae007;
     480       select count(1)
     481         into v_cnt
     482         from ac01
     483        where aac002 in
     484              (Select Aac002_New From Ac25 Where Bae007 = Pi_Bae007);
     485       if v_cnt > 0 then
     486         Select Aac002_New into v_aac002 From Ac25 Where Bae007 = Pi_Bae007;
     487         Po_Fhz := '-2';
     488         Po_Msg := '修改后的新身份证号' || v_aac002 ||
     489                   ',在新系统已经存在,请回退重新办理!pkg_weiyl.Updateidfh ,Pi_Bae007:' ||
     490                   Pi_Bae007 || ',Pi_Aae012:' || Pi_Aae012;
     491         return;
     492       else
     493         Update Ac01
     494            Set Aac002 =
     495                (Select b.Aac002_New From Ac25 b Where Bae007 = Pi_Bae007)
     496          Where Aac002 = (Select Aac002 From Ac25 Where Bae007 = Pi_Bae007);
     497       end if;
     498     
     499       Po_Fhz := '1';
     500       Po_Msg := '添加复核人成功';
     501     End;
     502   Exception
     503     When Others Then
     504       Po_Fhz := '-1';
     505       Po_Msg := '添加复核人失败,pkg_weiyl.Updateidfh ,Pi_Bae007:' || Pi_Bae007 ||
     506                 ',Pi_Aae012:' || Pi_Aae012;
     507   End Updateidfh;
     508   --身份证校验,把医保局,信息中心提出的身份证修改的条件 分出来,单独校验
     509   --身份证校验,把医保局,信息中心提出的身份证修改的条件 分出来,单独校验
     510   Procedure Validateidcard(Pi_Aac001     In Number,
     511                            Pi_Aac002_New In Varchar2,
     512                            Po_Fhz        Out Varchar2,
     513                            Po_Msg        Out Varchar2) Is
     514     v_Prcname        Varchar2(200) := c_Pkg_Name || '.validateIDCARD';
     515     v_Params         Varchar2(500) := 'pi_aac001=' || Pi_Aac001;
     516     v_Aae240         Skc81.Aae240%Type;
     517     v_Lc31_Count     Number(2);
     518     v_Count_Skc81    Number(2);
     519     v_Aac002_Tmp     Ac25.Aac002_New%Type;
     520     v_Count_Cardinfo Number(2);
     521     v_Count_Ac60     Number(2);
     522     v_Count_Kc21     Number(2);
     523     /*function validate_aac002 return varchar2 is
     524     v_aac002_new ac25.aac002_new%type;
     525     v_aac002_after number(20);
     526     begin
     527       select a.aac002_new into v_aac002_new from ac25 a where a.aac001 = pi_aac001;
     528       v_aac002_after := to_number(v_aac002_new);
     529     return '1';
     530     exception 
     531       when others then
     532         return '-1';
     533     end;*/
     534   Begin
     535     -- 初始化
     536     Po_Fhz := '1';
     537     -- 对修改后的身份证进行校验,防止不是纯数字,长度已经在前台进行了校验
     538     Vali_Idcard_Lenandchar(Pi_Aac002_New, Po_Fhz, Po_Msg);
     539     If Po_Fhz <> '1' Then
     540       Return;
     541     End If;
     542   
     543     -- 1 医保局提出的要求,如果skc81.aae240>0 ,余额大于0 就不让改身份证。
     544     Begin
     545       -- 先要判断是否 skc81 是否有数据,有的话在判断 skc81.aae240是否大于0 ,如果skc81 没有数据的话 就不查 余额
     546       Select Count(*)
     547         Into v_Count_Skc81
     548         From Skc81 a
     549        Where a.Aac001 = Pi_Aac001;
     550       If v_Count_Skc81 > 0 Then
     551         Select Nvl(a.Aae240, 0)
     552           Into v_Aae240
     553           From Skc81 a
     554          Where a.Aac001 = Pi_Aac001;
     555         If v_Aae240 > 0 Then
     556           /*po_fhz := v_prcName || '_91,医疗账户余额为' || v_aae240 || '元 ,因此不允许修改';*/
     557           Po_Fhz := v_Prcname ||
     558                     '_91,职工医疗账户不为0,此模块不允许修改身份证号,请到本人参保地核实身份证号在其他业务模块办理!';
     559           Po_Msg := Pkg_Fun.f_Errmsg(v_Prcname, Sqlcode, Sqlerrm, v_Params);
     560           Return;
     561           /*享受五险待遇的不能修改,所以包括了失业  享受五险待遇的不能修改,
     562           所以包括了失业  没办卡,又享受了失业待遇的 而且个人医保账户为0的*/
     563           --如果账户小于0,且
     564         Elsif v_Aae240 <= 0 Then
     565           Begin
     566             Select Aac002
     567               Into v_Aac002_Tmp
     568               From Ac01
     569              Where Aac001 = Pi_Aac001;
     570             Select Count(*)
     571               Into v_Count_Cardinfo
     572               From Card_Info a
     573              Where a.Idcard = v_Aac002_Tmp;
     574             If v_Count_Cardinfo = 0 Then
     575               --如果没有卡信息,然后再对五险进行判断,
     576               --add 20150224 有卡也要进行判断
     577               Select Count(*)
     578                 Into v_Count_Ac60
     579                 From Ac60
     580                Where Aaa076 In ('0401',
     581                                 '0403',
     582                                 '0404',
     583                                 '0411',
     584                                 '0421',
     585                                 '0702',
     586                                 '0810',
     587                                 '0821')
     588                  And Aae116 <> 4
     589                  And Aac001 = Pi_Aac001;
     590               If v_Count_Ac60 > 0 Then
     591                 Po_Fhz := v_Prcname || '_-92,' ||
     592                           '该人员没有卡信息,但是有享受待遇,不能修改身份证,请到本人参保地核实身份证号在其他业务模块办理!!';
     593                 Po_Msg := Pkg_Fun.f_Errmsg(v_Prcname,
     594                                            Sqlcode,
     595                                            Sqlerrm,
     596                                            v_Params);
     597                 Return;
     598               End If;
     599               --add 20150224 有卡也要进行判断
     600             Elsif v_Count_Cardinfo > 0 Then
     601               Select Count(*)
     602                 Into v_Count_Ac60
     603                 From Ac60
     604                Where Aaa076 In ('0401',
     605                                 '0403',
     606                                 '0404',
     607                                 '0411',
     608                                 '0421',
     609                                 '0702',
     610                                 '0810',
     611                                 '0821')
     612                  And Aae116 <> 4
     613                  And Aac001 = Pi_Aac001;
     614               If v_Count_Ac60 > 0 Then
     615                 Po_Fhz := v_Prcname || '_-92,' ||
     616                           '该人员有卡信息,且有享受待遇,不能修改身份证,请到本人参保地核实身份证号在其他业务模块办理!';
     617                 Po_Msg := Pkg_Fun.f_Errmsg(v_Prcname,
     618                                            Sqlcode,
     619                                            Sqlerrm,
     620                                            v_Params);
     621                 Return;
     622               End If;
     623             End If;
     624           Exception
     625             When No_Data_Found Then
     626               Po_Fhz := v_Prcname || '_-91,没有找到该人员的基本信息';
     627               Po_Msg := Pkg_Fun.f_Errmsg(v_Prcname,
     628                                          Sqlcode,
     629                                          Sqlerrm,
     630                                          v_Params);
     631           End;
     632         End If;
     633       End If;
     634     
     635     End;
     636     -- 2 信息中心提出的要求,有工伤认定的,也不允许修改
     637     Begin
     638       Select Count(*) Into v_Lc31_Count From Lc31 Where Aac001 = Pi_Aac001;
     639       If v_Lc31_Count > 0 Then
     640         Po_Fhz := v_Prcname ||
     641                   '_92,该人员存在工伤认定记录,不能修改身份证,请到本人参保地核实身份证号在其他业务模块办理!';
     642         Po_Msg := Pkg_Fun.f_Errmsg(v_Prcname, Sqlcode, Sqlerrm, v_Params);
     643         Return;
     644       End If;
     645     End;
     646   
     647     -- 3 住院的不能修改身份证,
     648     Begin
     649       Select Count(1)
     650         Into v_Count_Kc21
     651         From Kc21
     652        Where Aac001 = Pi_Aac001
     653          And Ckc544 = '1';
     654       If v_Count_Kc21 > 0 Then
     655         /*po_fhz := v_prcName||'_-93,该人员存在在院记录,不允许修改身份证!';*/
     656         Po_Fhz := '_-93,该人员存在在院记录,不能修改身份证,请到本人参保地核实身份证号在其他业务模块办理!';
     657         Po_Msg := Pkg_Fun.f_Errmsg(v_Prcname, Sqlcode, Sqlerrm, v_Params);
     658         Rollback;
     659         Return;
     660       End If;
     661     End;
     662   
     663   Exception
     664     When Others Then
     665       Po_Msg := Pkg_Fun.f_Errmsg(v_Prcname, Sqlcode, Sqlerrm, v_Params);
     666       Po_Fhz := '-1';
     667   End Validateidcard;
     668   /*校验身份证是否合法,包括长度,身份证字母*/
     669   Procedure Vali_Idcard_Lenandchar(Pi_Aac002 In Varchar2,
     670                                    Po_Fhz    Out Varchar2,
     671                                    Po_Msg    Out Varchar2) Is
     672     v_Aac002   Ac01.Aac002%Type;
     673     v_Count    Number(2);
     674     v_Params   Varchar2(500) := ',传入参数 pi_aac002 = ' || Pi_Aac002;
     675     v_Procname Varchar2(50) := c_Pkg_Name || '.vali_IdCard_lenAndChar';
     676     v_Aac002_n Number(20); -- 数值型,用于接收转换后的身份证号
     677     v_Char     Varchar2(2); -- 用于接收字符
     678     v_Char2    Varchar2(2);
     679   Begin
     680     -- 初始化返回值
     681     Po_Fhz := '1';
     682     Po_Msg := Pkg_Fun.f_Errmsg(v_Procname, Sqlcode, Sqlerrm, v_Params);
     683     Select Count(*) Into v_Count From Ac01 Where Aac002 = Pi_Aac002;
     684     If v_Count > 0 Then
     685       Select Trim(Pi_Aac002) Into v_Aac002 From Dual;
     686       -- 检查是否为18位
     687       If Length(v_Aac002) <> 18 Then
     688         Po_Fhz := v_Procname || '_-91,身份证长度不为18位';
     689         Po_Msg := Pkg_Fun.f_Errmsg(v_Procname, Sqlcode, Sqlerrm, v_Params);
     690         Return;
     691       End If;
     692       Begin
     693         -- 检查前17位是否有字母
     694         v_Aac002   := Substr(v_Aac002, 1, Length(v_Aac002) - 1);
     695         v_Aac002_n := To_Number(v_Aac002);
     696       Exception
     697         When Value_Error Then
     698           Po_Fhz := v_Procname || '_-92,身份证的前17位中含有非数值型字符';
     699           Po_Msg := Pkg_Fun.f_Errmsg(v_Procname, Sqlcode, Sqlerrm, v_Params);
     700           Return;
     701       End;
     702       -- 如果最后一位是字母,;
     703       Begin
     704         -- 检查前17位是否有字母
     705         Select Trim(Aac002)
     706           Into v_Aac002
     707           From Ac01
     708          Where Aac002 = Pi_Aac002;
     709         v_Aac002   := Substr(v_Aac002, Length(v_Aac002), 1);
     710         v_Aac002_n := To_Number(v_Aac002);
     711       Exception
     712         When Value_Error Then
     713           -- 说明最后一位是字母
     714           -- 如果最后一位是字母,检查最后一位数是否为x;
     715           Select Chr(88) Into v_Char From Dual;
     716           Select Upper((Substr(v_Aac002, Length(v_Aac002), 1)))
     717             Into v_Char2
     718             From Dual; --存放截取的最后一位字符
     719           If v_Char2 <> v_Char Then
     720             Po_Fhz := v_Procname || '_-93,身份证的最后一位不是大写的X';
     721             Po_Msg := Pkg_Fun.f_Errmsg(v_Procname,
     722                                        Sqlcode,
     723                                        Sqlerrm,
     724                                        v_Params);
     725             Return;
     726           End If;
     727       End;
     728     End If;
     729   Exception
     730     When Others Then
     731       Po_Fhz := v_Procname || '_-94,未知错误';
     732       Po_Msg := Pkg_Fun.f_Errmsg(v_Procname, Sqlcode, Sqlerrm, v_Params);
     733   End Vali_Idcard_Lenandchar;
     734 
     735   --修改身份证号
     736   Procedure Updateidcard_Fortest(Pi_Aac002     In Varchar2,
     737                                  Pi_Aac002_New In Varchar2,
     738                                  Pi_Aae013     In Varchar2,
     739                                  Pi_Aae011     In Varchar2,
     740                                  Pi_Bae001     In Varchar2,
     741                                  Po_Fhz        Out Varchar2,
     742                                  Po_Msg        Out Varchar2) Is
     743     v_Aac001   Ac02.Aac001%Type;
     744     v_Prc      Varchar2(200);
     745     v_Aab001   Ac02.Aab001%Type;
     746     v_Yl_Count Number(2); --养老待遇记录数
     747     v_Msg      Varchar2(200);
     748     v_Aaa076   Ac60.Aaa076%Type;
     749     v_Prcname  Varchar2(200);
     750     v_Params   Varchar2(500);
     751   Begin
     752     -- 初始化返回值
     753     Po_Fhz    := '1';
     754     Po_Msg    := '';
     755     v_Prc     := '.updateIDCard_fortest';
     756     v_Prcname := c_Pkg_Name || v_Prc;
     757     v_Params  := ',传入参数为:pi_aac002=' || Pi_Aac002 || ',pi_aac002_new=' ||
     758                  Pi_Aac002_New || ',pi_aae013' || Pi_Aae013 ||
     759                  ',pi_aae011=' || Pi_Aae011 || ',pi_bae001=' || Pi_Bae001;
     760     Select Aac001, Aab001
     761       Into v_Aac001, v_Aab001
     762       From Ac01
     763      Where Aac002 = Pi_Aac002;
     764     -- 先做 是否有养老待遇的判断,如果有就直接返回,不更新ac01.aac002
     765     Select Count(1) Into v_Yl_Count From Ac60 Where Aac001 = v_Aac001;
     766     If v_Yl_Count > 0 Then
     767       -- 如果有养老待遇,那么抛出更详细的结果,以便于前台更容易理解
     768       -- 只取第一条
     769       Select Aaa076
     770         Into v_Aaa076
     771         From Ac60
     772        Where Aac001 = v_Aac001
     773          And Rownum = 1;
     774       Select Func_Wyl('AAA076', v_Aaa076) Into v_Msg From Dual;
     775       Po_Fhz := '-1';
     776       Po_Msg := Pkg_Name || v_Prc ||
     777                 '执行失败,该人员有待遇享受信息,此模块不允许修改身份证号!养老待遇类型为 "' || v_Msg ||
     778                 '" 的养老待遇,且待遇状态正常';
     779       Return;
     780     End If;
     781     -- 更新ac01.AAC002
     782     Update Ac01 Set Aac002 = Pi_Aac002_New Where Aac001 = v_Aac001;
     783     Insert Into Ac25
     784       (Aaz163,
     785        Bae001,
     786        Aab001,
     787        Aac001,
     788        Cae129,
     789        Aac050,
     790        Aae160,
     791        Cac038,
     792        Bae007,
     793        Aae011,
     794        Aae036,
     795        Bce326,
     796        Aae012,
     797        Bhe949,
     798        Cae030,
     799        Cae031,
     800        Aae013)
     801     Values
     802       (Seq_Bxgx_Aaz163.Nextval, --使用原来的序列号
     803        Pi_Bae001,
     804        v_Aab001,
     805        v_Aac001,
     806        '201310',
     807        '50', -- 50,变更类型为 修改资料
     808        '1933', -- 1933,变更原因, 其它
     809        '',
     810        '99999999', -- 业务流水号
     811        Pi_Aae011,
     812        To_Char(Sysdate, 'yyyymmddhh24miss'),
     813        '1',
     814        Pi_Aae011,
     815        To_Char(Sysdate, 'yyyymmddhh24miss'),
     816        '',
     817        '',
     818        Pi_Aae013);
     819   
     820   Exception
     821     When No_Data_Found Then
     822       -- Sqlcode, Sqlerrm
     823       Po_Fhz := v_Prcname || '_01';
     824       Po_Msg := '过程' || Pkg_Name || v_Prc || '报错,ac01表里没有找到该人员,sqlcode:' ||
     825                 Sqlcode || ',sqlerrm:' || Sqlerrm;
     826       Po_Msg := Pkg_Fun.f_Errmsg(v_Prcname, Sqlcode, Sqlerrm, v_Params);
     827       Return;
     828   End Updateidcard_Fortest;
     829 
     830   -- 截取字符串     
     831   --  create or replace type split_type is table of varchar2(4000)
     832   -- 取出字符串的方法 : select column_value from table (pkg_weiyl.split_dh('dd,aa,134'));
     833   Function Split_Dh(p_Str       In Varchar2,
     834                     p_Delimiter In Varchar2 Default (',') --分隔符,默认逗号  
     835                     ) Return Split_Type Is
     836     j        Int := 0;
     837     i        Int := 1;
     838     Len      Int := 0;
     839     Len1     Int := 0;
     840     Str      Varchar2(4000);
     841     My_Split Split_Type := Split_Type();
     842   Begin
     843     -- 要分割的字符串的长度
     844     Len := Length(p_Str);
     845     -- 分隔符的长度
     846     Len1 := Length(p_Delimiter);
     847   
     848     While j < Len Loop
     849       j := Instr(p_Str, p_Delimiter, i);
     850     
     851       If j = 0 Then
     852         j   := Len;
     853         Str := Substr(p_Str, i);
     854         My_Split.Extend;
     855         My_Split(My_Split.Count) := Str;
     856       
     857         If i >= Len Then
     858           Exit;
     859         End If;
     860       Else
     861         Str := Substr(p_Str, i, j - i);
     862         i   := j + Len1;
     863         My_Split.Extend;
     864         My_Split(My_Split.Count) := Str;
     865       End If;
     866     End Loop;
     867   
     868     Return My_Split;
     869   End Split_Dh;
     870 
     871   --字典转换,把代码值转换成对应的可理解的中文,卫永乐,20141105
     872   Function Func_Wyl(Pi_Aaa100 Varchar2, Pi_Aaa102 Varchar2) Return Varchar2 Is
     873     v_Aaa103 Varchar2(1000);
     874   Begin
     875     Select Aaa103
     876       Into v_Aaa103
     877       From Aa10 a
     878      Where a.Aaa100 = Pi_Aaa100
     879        And a.Aaa102 = Pi_Aaa102;
     880     Return v_Aaa103;
     881   Exception
     882     When No_Data_Found Then
     883       Dbms_Output.Put_Line('没有找到数据');
     884   End;
     885 
     886   Function Func_Check_Para(Pi_Aab999 In Varchar2, --单位编号
     887                            Pi_Pch    In Varchar2, --批次号
     888                            Pi_Aae001 In Number,
     889                            Pi_Aae036 In Varchar2,
     890                            Pi_Aac027 In Number)
     891   /*拼接where条件 过程 check_sdnmdc 的游标的where条件*/
     892    Return Varchar2 Is
     893     v_where varchar2(500);
     894   Begin
     895     /*v_where := ' where 1=1 and ';*/
     896     v_where := ' null or 1=1 ';
     897     /*Select * From v_sdnm_sjql_dc Where Aab999 = To_Char(Pi_Aab999);*/
     898   
     899     if pi_aab999 <> '0' then
     900       v_where := v_where || ' and aab999=''' || pi_aab999 || '''';
     901     elsif Pi_Aab999 = '0' then
     902       v_where := ' null or 1=1 ';
     903     end if;
     904     if Pi_Aae001 <> '0' then
     905       v_where := v_where || ' and aae001=' || pi_aae001;
     906       /*elsif Pi_Aae001 = '0' then 
     907       v_where := v_where||' and aae001='||pi_aae001;*/
     908     end if;
     909     if Pi_Aae036 <> '0' then
     910       v_where := v_where || ' and substr(aae036,1,6)=''' || Pi_Aae036 || '''';
     911       /*elsif Pi_Aae036 = '0' then 
     912       v_where := v_where||' and substr(aae036,1,6)='''||Pi_Aae036||'''';*/
     913     end if;
     914     if Pi_Aac027 <> '0' then
     915       v_where := v_where || ' and aac027=' || Pi_Aac027 || ' ';
     916     end if;
     917     Return v_where;
     918   End Func_Check_Para;
     919 
     920   /* 
     921      added 20160801 
     922     获取月份差值,主要针对于转移统计的
     923   */
     924   function getMonthNum(pi_ksyf   in number,
     925                        pi_zzyf   in number,
     926                        pi_aae180 in number) return number is
     927     v_mon number(3);
     928   
     929   begin
     930     /*
     931      如果 sac14 的 aae041 201601 ,aae042 201602 ,aae180 0 ,这种情况总的月份 就算是0 ,(201602-201601+1)*aae180 
     932      否则 就算是201602-201601+1 = 2 ;
     933     */
     934     if nvl(pi_aae180, 0) != 0 and pi_zzyf >= pi_ksyf then
     935       v_mon := pi_zzyf - pi_ksyf + 1;
     936     else
     937       v_mon := 0;
     938     end if;
     939     return v_mon;
     940   end getMonthNum;
     941 
     942   --县级公立医院支付
     943   Procedure Xjyyzf(Pi_Bae007 In Varchar2,
     944                    Pi_Operid In Varchar2,
     945                    Pi_Aae037 In Varchar2,
     946                    Pi_Aae038 In Varchar2,
     947                    Po_Fhz    Out Varchar2,
     948                    Po_Msg    Out Varchar2) Is
     949     v_Bae007 Skc70.Bae007%Type;
     950     v_Time   Skc70.Aae015%Type;
     951     Cursor c_Bae007 Is
     952       Select Column_Value From Table(Pkg_Weiyl.Split_Dh(Pi_Bae007));
     953   Begin
     954     Po_Msg := '成功';
     955     Po_Fhz := '1';
     956     Select To_Char(Sysdate, 'yyyymmddhh24miss') Into v_Time From Dual;
     957   
     958     For v_Bae007 In c_Bae007 Loop
     959       -- 清空改经办人的临时表
     960       Delete From t_Skc70 a
     961        Where a.Bae007 = Pi_Bae007
     962          And a.Aae011 = Pi_Operid;
     963       Insert Into t_Skc70
     964         (Bae007, Aae011)
     965       Values
     966         (v_Bae007.Column_Value, Pi_Operid);
     967       Update Skc70
     968          Set Aae117 = '1',
     969              Cae295 = Pi_Operid,
     970              Aae015 = v_Time,
     971              Aae037 = Substr(Pi_Aae037, 1, 8),
     972              Aae038 = Substr(Pi_Aae038, 1, 8)
     973        Where Bae007 = v_Bae007.Column_Value;
     974     End Loop;
     975   Exception
     976     When Others Then
     977       Rollback;
     978       Po_Msg := '失败';
     979       Po_Fhz := '-1';
     980   End Xjyyzf;
     981 
     982   --- 循环调用的过程,解决每次都要自己写一个declare plsql代码块,
     983   --入参:还没写完
     984 
     985   Procedure Prc_Xunhuan(Pi_Prcname In Varchar2, --要调用的过程名
     986                         Pi_Tabname In Varchar2, --cursor取值的表
     987                         Po_Fhz     Out Varchar2,
     988                         Po_Msg     Out Varchar2) Is
     989     v_Prcname Varchar2(400) := '.prc_xunhuan';
     990     v_Params  Varchar2(200) := 'pi_prcName=' || Pi_Prcname ||
     991                                ',pi_tabName:' || Pi_Tabname;
     992     /*cursor cur_xunhuan is 
     993     select * from pi_tabName where aac001 = '';*/
     994   Begin
     995   
     996     Null;
     997   Exception
     998     When Others Then
     999       Po_Fhz := '';
    1000       Po_Msg := Pkg_Fun.f_Errmsg(v_Prcname, Sqlcode, Sqlerrm, v_Params);
    1001   End;
    1002   Procedure Xjyyzf_Callback(Pi_Bae007 In Varchar2,
    1003                             Pi_Operid In Varchar2,
    1004                             Po_Fhz    Out Varchar2,
    1005                             Po_Msg    Out Varchar2) Is
    1006     v_Bae007 Skc70.Bae007%Type;
    1007     v_Time   Skc70.Aae015%Type;
    1008     Cursor c_Bae007 Is
    1009       Select Column_Value From Table(Pkg_Weiyl.Split_Dh(Pi_Bae007));
    1010   Begin
    1011     Po_Msg := '成功';
    1012     Po_Fhz := '1';
    1013     For v_Bae007 In c_Bae007 Loop
    1014       -- 清空改经办人的临时表
    1015       Delete From t_Skc70 a
    1016        Where a.Bae007 = v_Bae007.Column_Value
    1017          And a.Aae011 = Pi_Operid;
    1018     End Loop;
    1019   Exception
    1020     When Others Then
    1021       --rollback;
    1022       Po_Msg := '失败';
    1023       Po_Fhz := '-1';
    1024   End Xjyyzf_Callback;
    1025 
    1026   --县级公立医院支付取消
    1027   Procedure Xjyyzfqx(Pi_Bae007 In Varchar2,
    1028                      Po_Fhz    Out Varchar2,
    1029                      Po_Msg    Out Varchar2) Is
    1030     v_Bae007 Skc70.Bae007%Type;
    1031     Cursor c_Bae007 Is
    1032       Select Column_Value From Table(Pkg_Weiyl.Split_Dh(Pi_Bae007));
    1033   Begin
    1034     Po_Msg := '成功';
    1035     Po_Fhz := '1';
    1036     For v_Bae007 In c_Bae007 Loop
    1037       --清空临时表
    1038       Delete From t_Skc70 Where Bae007 = v_Bae007.Column_Value;
    1039       Update Skc70 Set Aae117 = '0' Where Bae007 = v_Bae007.Column_Value;
    1040     End Loop;
    1041   Exception
    1042     When Others Then
    1043       Po_Msg := '失败';
    1044       Po_Fhz := '-1';
    1045   End Xjyyzfqx;
    1046   /*自治事务*/
    1047   Procedure Autonomous_Tran(Pi_Aac001 In Varchar2,
    1048                             Po_Fhz    Out Varchar2,
    1049                             Po_Msg    Out Varchar2) Is
    1050     Pragma Autonomous_Transaction; --自治事务关键字
    1051     v_Proname Varchar2(400);
    1052     v_Aab001  Number(20);
    1053   Begin
    1054     Po_Fhz   := '1';
    1055     Po_Msg   := '成功!';
    1056     v_Aab001 := Seq_Bxgx_Aab001.Nextval;
    1057     Insert Into Xzl_One (Aac002) Values (v_Aab001); -- v_aab001 是number,竟然可以插入varchar2类型字段
    1058     --commit;
    1059     Update Xzl_One
    1060        Set Aac003 =
    1061            (v_Aab001 || '姓名')
    1062      Where Aac002 = v_Aab001 || ''; --但是查却没法查到
    1063     Commit;
    1064   Exception
    1065     When Others Then
    1066       Rollback;
    1067       Po_Fhz := '-1';
    1068       Po_Msg := '失败,' || Sqlcode || ',sqlerrm:' || Sqlerrm;
    1069       Return;
    1070   End Autonomous_Tran;
    1071   /*手工添加表级锁,使用场景,如果要操作一张大表的大部分数据,
    1072     如果不加表级锁,那么就会耗费大量的资源,这种情况下可以使用
    1073     手工给表加锁,释放方式 rollback,或者commit
    1074     使用目的:更改 ac02_tmp表 的险种状态,ac02_tmp 表结构和数据
    1075     和ac02的一样
    1076   */
    1077   Procedure Update_Ac02_Aae140(Pi_Aae140 In Varchar2,
    1078                                Pi_Fhz    Out Varchar2,
    1079                                Po_Msg    Out Varchar2) Is
    1080     Cursor Cur_Ac02 Return Ac02_Tmp%Rowtype Is
    1081       Select * From Ac02_Tmp Where Aae140 = Pi_Aae140;
    1082     v_Cur_Ac02 Ac02_Tmp%Rowtype;
    1083   Begin
    1084     --sys.dbms_profiler.start_profiler;
    1085     Lock Table Ac02_Tmp In Exclusive Mode Nowait;
    1086     Open Cur_Ac02;
    1087     Loop
    1088       Fetch Cur_Ac02
    1089         Into v_Cur_Ac02;
    1090       Exit When Cur_Ac02%Notfound; --检查是否找到,
    1091       -- 找到的话就就更新
    1092       Update Ac02_Tmp
    1093          Set Aac008 = '8'
    1094        Where Aae140 = Pi_Aae140
    1095          And Aac008 = '2';
    1096       Null;
    1097     End Loop;
    1098     Close Cur_Ac02;
    1099     Commit; --释放表级锁
    1100     --sys.dbms_profiler.stop_profiler;
    1101   End Update_Ac02_Aae140;
    1102 
    1103   Procedure Querycheck(Pi_Aac002 In Varchar2,
    1104                        Pi_Aac003 In Varchar2,
    1105                        Po_Fhz    Out Varchar2,
    1106                        Po_Msg    Out Varchar2) Is
    1107     v_Count Number(2);
    1108   Begin
    1109     --初始化返回值
    1110     Po_Fhz := '-1';
    1111     Po_Msg := '失败,该人员没有卡信息';
    1112     If Pi_Aac002 = '0' Then
    1113       Select Count(*) Into v_Count From Card_Info Where Name = Pi_Aac003;
    1114       If v_Count > 0 Then
    1115         Po_Fhz := '1';
    1116         Po_Msg := '成功';
    1117       End If;
    1118     End If;
    1119     If Pi_Aac003 = '0' Then
    1120       Select Count(*) Into v_Count From Card_Info Where Idcard = Pi_Aac002;
    1121       If v_Count > 0 Then
    1122         Po_Fhz := '1';
    1123         Po_Msg := '成功';
    1124       End If;
    1125     End If;
    1126   End;
    1127   Procedure Check_Ac02(Pi_Aac002 In Varchar2,
    1128                        Po_Aac001 Out Number,
    1129                        Po_Cac012 Out Varchar2,
    1130                        Po_Aab001 Out Varchar2,
    1131                        Po_Fhz    Out Varchar2,
    1132                        Po_Msg    Out Varchar2) Is
    1133     v_Count1 Number(2);
    1134     v_Count2 Number(2);
    1135     v_Count3 Number(2);
    1136     v_Aab001 Ac02.Aab001%Type;
    1137     v_Aac001 Ac01.Aac001%Type;
    1138     v_Cac012 Sac01.Cac012%Type;
    1139   Begin
    1140     -- 初始化返回值
    1141     Po_Fhz := '1';
    1142     Select Count(1) Into v_Count1 From Ac01 Where Aac002 = Pi_Aac002;
    1143     If v_Count1 <= 0 Then
    1144       Po_Msg := '该人员不存在';
    1145       Po_Fhz := '-1';
    1146       Return;
    1147     End If;
    1148     Select Aac001 Into v_Aac001 From Ac01 Where Aac002 = Pi_Aac002;
    1149     Select Count(1) Into v_Count2 From Sac01 Where Aac001 = v_Aac001;
    1150     If v_Count2 <= 0 Then
    1151       Po_Msg := '该人员缺少对应的sac01的信息,';
    1152       Po_Fhz := '-1';
    1153       Return;
    1154     End If;
    1155     Select a.Cac012 Into v_Cac012 From Sac01 a Where Aac001 = v_Aac001;
    1156     Select Count(1)
    1157       Into v_Count3
    1158       From Ac02
    1159      Where Aae140 = '342'
    1160        And Aac001 = v_Aac001
    1161        And Aac008 = '1';
    1162     If v_Count3 <= 0 Then
    1163       Po_Msg := '该人员没有正常参保';
    1164       Po_Fhz := '-1';
    1165       Return;
    1166     End If;
    1167     Select Distinct (Aab001)
    1168       Into v_Aab001
    1169       From Ac02
    1170      Where Aac001 = v_Aac001
    1171        And Aae140 = '342'
    1172        And Aac008 = '1';
    1173     Po_Aab001 := v_Aab001;
    1174     Po_Aac001 := v_Aac001;
    1175     Po_Cac012 := v_Cac012;
    1176   End;
    1177 
    1178   Procedure Check_Skc84(Pi_Aac001 In Varchar2,
    1179                         Po_Fhz    Out Varchar2,
    1180                         Po_Msg    Out Varchar2) Is
    1181     v_Count1 Number(2);
    1182     v_Count2 Number(2);
    1183     v_Aac001 Ac01.Aac001%Type;
    1184   Begin
    1185     -- 初始化返回值
    1186     Po_Fhz := '1';
    1187     Select Count(1)
    1188       Into v_Count1
    1189       From Skc84
    1190      Where Aac001 = Pi_Aac001
    1191        And Aae140 = '342';
    1192     If v_Count1 <= 0 Then
    1193       Po_Msg := '该人员不存在当年的医保缴费';
    1194       Po_Fhz := '-1';
    1195       Return;
    1196     End If;
    1197   End;
    1198   /*失地农民数据清理导出前,
    1199     把导出的数据保存到ic58里,防止再次导出
    1200   */
    1201   Procedure Check_Sdnmdcc(Pi_Aab999 In Varchar2,
    1202                           PI_PCH    in varchar2,
    1203                           Po_Fhz    Out Varchar2,
    1204                           Po_Msg    Out Varchar2) Is
    1205     v_Aac001     Ac01.Aac001%Type;
    1206     v_Prcname    Varchar2(200);
    1207     v_Params     Varchar2(200);
    1208     v_Ic58_Count Number(5);
    1209     Cursor c_Ydcry Is
    1210       Select * From v_Sdnm_Sjql_Dc Where Aab999 = To_Char(Pi_Aab999);
    1211   Begin
    1212     v_Prcname := 'pkg_weiyl.check_sdnmdc';
    1213     v_Params  := 'pi_aab999:' || Pi_Aab999;
    1214     Po_Fhz    := '1';
    1215     Po_Msg    := '成功';
    1216     /*清空ic61*/
    1217     For c_Tmp In c_Ydcry Loop
    1218       Insert Into Ic58 (Aac001, Aab999) Values (c_Tmp.Aac001, Pi_Aab999);
    1219       /*导出用这个表*/
    1220       Insert Into Ic61 (Aac001, Aab999) Values (c_Tmp.Aac001, Pi_Aab999);
    1221       /*加入批次号 */
    1222       insert into ic58_dc
    1223         (aac001, aab999, aaz601)
    1224       values
    1225         (c_Tmp.Aac001, Pi_Aab999, PI_PCH);
    1226     End Loop;
    1227     Select Count(1) Into v_Ic58_Count From Ic58 Where Aab999 = Pi_Aab999;
    1228     If v_Ic58_Count > 0 Then
    1229       Po_Fhz := '2';
    1230       Po_Msg := '该单位已经进行过导出业务的操作,此次导出将导出该单位下剩余部分的人员,如果之前已经全部导出,那么此次将不导出数据';
    1231     End If;
    1232   Exception
    1233     When Others Then
    1234       Po_Msg := Pkg_Fun.f_Errmsg(v_Prcname, Sqlcode, Sqlerrm, v_Params);
    1235       Po_Fhz := '-1';
    1236   End Check_Sdnmdcc;
    1237   /*
    1238     现在正在使用的失地农民数据导出
    1239     这里使用了动态sql,
    1240     注意点:在存储过程里的增删改查语句如果有拼接,
    1241     那么一定要用动态sql,否则可能能够编译通过,但是
    1242     执行的时候没有达到预期。因为:拼接的where条件很可能被
    1243     引擎当作普通字符串处理,也就什么都没查得到,自然更新数据就没法更新成功
    1244   */
    1245   Procedure Check_Sdnmdc(Pi_Bae001 In Varchar2,
    1246                          Pi_Aab999 In Varchar2,
    1247                          Pi_Pch    In Varchar2,
    1248                          /* PI_GLT   in varchar2,*/
    1249                          Pi_Aae001 In Varchar2,
    1250                          Pi_Aae036 In Varchar2,
    1251                          Pi_Aac027 In Varchar2,
    1252                          Pi_Bzw    In Varchar2,
    1253                          Pi_Oper   In Varchar2,
    1254                          Po_Fhz    Out Varchar2,
    1255                          Po_Msg    Out Varchar2) Is
    1256     v_Aac001     Ac01.Aac001%Type;
    1257     v_Prcname    Varchar2(200);
    1258     v_Params     Varchar2(200);
    1259     v_Ic58_Count Number(5);
    1260     v_Tmp        Varchar2(400);
    1261     v_Sql        Varchar2(1000);
    1262     Cursor c_Ydcry Is
    1263       Select *
    1264         From v_Sdnm_Sjql_Dc_Multi
    1265        Where Aab999 = Func_Check_Para(Pi_Aab999,
    1266                                       Pi_Pch,
    1267                                       Pi_Aae001,
    1268                                       Pi_Aae036,
    1269                                       Pi_Aac027);
    1270   Begin
    1271   
    1272     v_Prcname := 'pkg_weiyl.check_sdnmdc';
    1273     v_Params  := 'pi_aab999:' || Pi_Aab999;
    1274     Po_Fhz    := '1';
    1275     Po_Msg    := '成功';
    1276     /*拼接where条件*/
    1277     Select Func_Check_Para(Pi_Aab999,
    1278                            Pi_Pch,
    1279                            Pi_Aae001,
    1280                            Pi_Aae036,
    1281                            Pi_Aac027)
    1282       Into v_Tmp
    1283       From Dual;
    1284     /*insert into ic58_dcsj() values (select * from v_sdnm_sjql_dc a where 1=1 and aab999 = '02002489');*/
    1285     /*v_Sql := 'Insert Into Ic58_Dcsj
    1286     Select a.*, ' || To_Char(Sysdate, 'yyyymmddhh24miss') || ',' ||
    1287            Pi_Pch || ',' || '1' || '
    1288       From v_Sdnm_Sjql_Dc a
    1289      Where a.bae001 = '''||Pi_Bae001||''' and  Aab999 = ' || v_Tmp ||
    1290            ' And Not Exists (Select *
    1291         From Ic58_Dcsj z
    1292        Where z.Aaz288 = a.Aaz288
    1293          And z.Aac001 = a.Aac001) ';*/
    1294     -- 20160505 altered 
    1295     /* v_Sql := 'Insert Into Ic58_Dcsj
    1296     Select a.*, ' || To_Char(Sysdate, 'yyyymmddhh24miss') || ',' ||
    1297            Pi_Pch || ',' || '''' || Pi_Bzw || '''' || ',''' || Pi_Oper || '''
    1298       From v_Sdnm_Sjql_Dc a
    1299      Where  Aab999 = ' || v_Tmp || ' and bae001 = ''' ||
    1300            pi_bae001 || ''' And Not Exists (Select *
    1301         From Ic58_Dcsj z
    1302        Where z.Aaz288 = a.Aaz288
    1303          And z.Aac001 = a.Aac001) ';*/
    1304     v_Sql := 'Insert Into Ic58_Dcsj
    1305       Select a.*, ' || '1,' ||
    1306              To_Char(Sysdate, 'yyyymmddhh24miss') || ',' || Pi_Pch || ',' || '''' ||
    1307              Pi_Bzw || '''' || ',''' || Pi_Oper || '''
    1308         From v_Sdnm_Sjql_Dc a
    1309        Where  Aab999 = ' || v_Tmp || ' and bae001 = ''' ||
    1310              pi_bae001 || ''' And Not Exists (Select *
    1311           From Ic58_Dcsj z
    1312          Where z.Aaz288 = a.Aaz288
    1313            And z.Aac001 = a.Aac001) ';
    1314     Execute Immediate v_Sql;
    1315     /*清空ic61*/
    1316     /*For c_Tmp In c_Ydcry Loop
    1317       Insert Into Ic58 (Aac001, Aab999) Values (c_Tmp.Aac001, Pi_Aab999);
    1318       导出用这个表
    1319       Insert Into Ic61 (Aac001, Aab999) Values (c_Tmp.Aac001, Pi_Aab999);
    1320       加入批次号 
    1321       Insert Into Ic58_Dc
    1322         (Aac001, Aab999, Aaz601, Bzw)
    1323       Values
    1324         (c_Tmp.Aac001, Pi_Aab999, Pi_Pch, '1');
    1325       备份失地农民数据
    1326     update ic58_dcsj q set q.dcsj=To_Char(Sysdate, 'yyyymmddhh24miss'),q.aaz601=PI_PCH;
    1327     End Loop;*/
    1328     /*Select Count(1) Into v_Ic58_Count From Ic58 Where Aab999 = Pi_Aab999;*/
    1329     Select Count(1)
    1330       Into v_Ic58_Count
    1331       From Ic58_Dcsj
    1332      Where Aaz601 <> Pi_Pch
    1333        And Aab999 = Pi_Aab999;
    1334     If v_Ic58_Count > 0 Then
    1335       Po_Fhz := '2';
    1336       Po_Msg := '该单位已经进行过导出业务的操作,此次导出将导出该单位下剩余部分的人员,如果之前已经全部导出,那么此次将不导出数据';
    1337     End If;
    1338   Exception
    1339     When Others Then
    1340       Po_Msg := Pkg_Fun.f_Errmsg(v_Prcname, Sqlcode, Sqlerrm, v_Params);
    1341       Po_Fhz := '-1';
    1342   End Check_Sdnmdc;
    1343 
    1344   /*失地农民数据清理导出前,
    1345     把导出的数据保存到ic58里,防止再次导出
    1346     导出单条的check
    1347     02002489
    1348   */
    1349   Procedure Check_Sdnmdc_Multi(Pi_Bae001 In Varchar2,
    1350                                Pi_Aab999 In Varchar2,
    1351                                Pi_Pch    In Varchar2,
    1352                                /* PI_GLT   in varchar2,*/
    1353                                Pi_Aae001 In Varchar2,
    1354                                Pi_Aae036 In Varchar2,
    1355                                Pi_Aac027 In Varchar2,
    1356                                Pi_Bzw    In Varchar2,
    1357                                Pi_Oper   In Varchar2,
    1358                                Po_Fhz    Out Varchar2,
    1359                                Po_Msg    Out Varchar2) Is
    1360     v_Aac001     Ac01.Aac001%Type;
    1361     v_Prcname    Varchar2(200);
    1362     v_Params     Varchar2(200);
    1363     v_Ic58_Count Number(5);
    1364     v_Tmp        Varchar2(400);
    1365     v_Sql        Varchar2(1000);
    1366     Cursor c_Ydcry Is
    1367       Select *
    1368         From v_Sdnm_Sjql_Dc
    1369        Where Aab999 = Func_Check_Para(Pi_Aab999,
    1370                                       Pi_Pch,
    1371                                       Pi_Aae001,
    1372                                       Pi_Aae036,
    1373                                       Pi_Aac027);
    1374   Begin
    1375   
    1376     v_Prcname := 'pkg_weiyl.Check_Sdnmdc_Multi';
    1377     v_Params  := 'pi_aab999:' || Pi_Aab999;
    1378     Po_Fhz    := '1';
    1379     Po_Msg    := '成功';
    1380     /*拼接where条件*/
    1381     Select Func_Check_Para(Pi_Aab999,
    1382                            Pi_Pch,
    1383                            Pi_Aae001,
    1384                            Pi_Aae036,
    1385                            Pi_Aac027)
    1386       Into v_Tmp
    1387       From Dual;
    1388     /*insert into ic58_dcsj() values (select * from v_sdnm_sjql_dc a where 1=1 and aab999 = '02002489');*/
    1389     /*v_Sql := 'Insert Into Ic58_Dcsj
    1390     Select a.*, ' || To_Char(Sysdate, 'yyyymmddhh24miss') || ',' ||
    1391            Pi_Pch || ',' || ''''||Pi_Bzw||''''||','''|| Pi_Oper|| '''
    1392       From v_Sdnm_Sjql_Dc_multi a
    1393      Where  Aab999 = ' || v_Tmp ||
    1394            ' and bae001 = '''||pi_bae001||''' And Not Exists (Select *
    1395         From Ic58_Dcsj z
    1396        Where z.Aaz288 = a.Aaz288
    1397          And z.Aac001 = a.Aac001) ';*/
    1398     v_Sql := 'Insert Into Ic58_Dcsj
    1399       Select a.*, ' || To_Char(Sysdate, 'yyyymmddhh24miss') || ',' ||
    1400              Pi_Pch || ',' || '''' || Pi_Bzw || '''' || ',''' || Pi_Oper || '''
    1401         From v_Sdnm_Sjql_Dc_multi a
    1402        Where  Aab999 = ' || v_Tmp || ' and bae001 = ''' ||
    1403              pi_bae001 || ''' And Not Exists (Select *
    1404           From Ic58_Dcsj z
    1405          Where z.Aaz288 = a.Aaz288
    1406            And z.Aac001 = a.Aac001) ';
    1407     Execute Immediate v_Sql;
    1408     /*清空ic61*/
    1409     /*For c_Tmp In c_Ydcry Loop
    1410       Insert Into Ic58 (Aac001, Aab999) Values (c_Tmp.Aac001, Pi_Aab999);
    1411       导出用这个表
    1412       Insert Into Ic61 (Aac001, Aab999) Values (c_Tmp.Aac001, Pi_Aab999);
    1413       加入批次号 
    1414       Insert Into Ic58_Dc
    1415         (Aac001, Aab999, Aaz601, Bzw)
    1416       Values
    1417         (c_Tmp.Aac001, Pi_Aab999, Pi_Pch, '1');
    1418       备份失地农民数据
    1419     update ic58_dcsj q set q.dcsj=To_Char(Sysdate, 'yyyymmddhh24miss'),q.aaz601=PI_PCH;
    1420     End Loop;*/
    1421     /*Select Count(1) Into v_Ic58_Count From Ic58 Where Aab999 = Pi_Aab999;*/
    1422     Select Count(1)
    1423       Into v_Ic58_Count
    1424       From Ic58_Dcsj
    1425      Where Aaz601 <> Pi_Pch
    1426        And Aab999 = Pi_Aab999;
    1427     If v_Ic58_Count > 0 Then
    1428       Po_Fhz := '2';
    1429       Po_Msg := '该单位已经进行过导出业务的操作,此次导出将导出该单位下剩余部分的人员,如果之前已经全部导出,那么此次将不导出数据';
    1430     End If;
    1431   Exception
    1432     When Others Then
    1433       Po_Msg := Pkg_Fun.f_Errmsg(v_Prcname, Sqlcode, Sqlerrm, v_Params);
    1434       Po_Fhz := '-1';
    1435   End Check_Sdnmdc_Multi;
    1436 
    1437   Procedure Updatekbb5(Pi_Bae007 In Varchar2,
    1438                        Pi_Ckz545 In Varchar2,
    1439                        Pi_Ckb626 In Varchar2,
    1440                        Pi_Ckb627 In Varchar2,
    1441                        Pi_Ckb629 In Varchar2,
    1442                        Pi_Ckb630 In Varchar2,
    1443                        Po_Fhz    Out Varchar2,
    1444                        Po_Msg    Out Varchar2) Is
    1445   Begin
    1446     Po_Fhz := '1';
    1447     Po_Msg := '成功';
    1448     Update Kbb5
    1449        Set Ckz545 = Pi_Ckz545,
    1450            Ckb626 = Pi_Ckb626,
    1451            Ckb627 = Pi_Ckb627,
    1452            Ckb629 = Pi_Ckb629,
    1453            Ckb630 = Pi_Ckb630
    1454      Where Bae007 = Pi_Bae007;
    1455   End;
    1456   Procedure Getaaz601(Pi_Rc     In Varchar2,
    1457                       po_aaz601 out number,
    1458                       Po_Fhz    Out Varchar2,
    1459                       Po_Msg    Out Varchar2) Is
    1460     v_aaz601 ic58_dc.aaz601%type;
    1461   Begin
    1462     Po_Fhz := '1';
    1463     Po_Msg := '成功';
    1464     Select Seq_Ggyw_Aaz601.Nextval into po_aaz601 From Dual;
    1465   exception
    1466     when others then
    1467       po_msg := 'pkg_weiyl.Getaaz601 获取批次号失败';
    1468       Po_Fhz := '-1';
    1469   End;
    1470   /*
    1471   知识库相关过程
    1472   20160323 by weiyongle
    1473   */
    1474   Procedure Insertfw_Zsk(PI_AAA200 in varchar2,
    1475                          Pi_Aae202 In Varchar2,
    1476                          Pi_Aaa203 In Varchar2,
    1477                          Pi_Aae008 In Varchar2,
    1478                          PI_AAE011 IN VARCHAR2,
    1479                          PI_AAE906 IN VARCHAR2,
    1480                          PI_BZ     IN VARCHAR2,
    1481                          Po_Fhz    Out Varchar2,
    1482                          Po_Msg    Out Varchar2) is
    1483   begin
    1484     po_fhz := '1';
    1485     po_msg := '成功';
    1486     null;
    1487     /*如果是'1',那么说明是修改*/
    1488     if pi_bz = '1' then
    1489       update fw_zsk
    1490          set aae202 = Pi_Aae202,
    1491              aaa203 = Pi_Aaa203,
    1492              aae008 = pi_aae008,
    1493              aae011 = PI_AAE011
    1494        where aae906 = PI_AAE906;
    1495     elsif pi_bz = '0' then
    1496       insert into fw_zsk
    1497         (aaa200, aae202, aaa203, aae008, aae011, aae036, aae906)
    1498       values
    1499         (PI_AAA200,
    1500          Pi_Aae202,
    1501          Pi_Aaa203,
    1502          pi_aae008,
    1503          PI_AAE011,
    1504          To_Char(Sysdate, 'yyyymmddhh24miss'),
    1505          SEQ_FW_AAE906.Nextval);
    1506     end if;
    1507   exception
    1508     when others then
    1509       po_fhz := '-1';
    1510       po_msg := '失败';
    1511   end Insertfw_Zsk;
    1512   /*拼接两个字符串,
    1513   练手嵌套存储过程
    1514    注意点:使用嵌套存储过程时,在declaration中可以同时定义变量
    1515    但是 定义的变量只能够写在嵌套存储过程的前面,否则没法编译通过
    1516    20160407
    1517   */
    1518   procedure testNestedPro(pi_xing   in varchar2,
    1519                           pi_ming   in varchar2,
    1520                           pi_aab001 in number,
    1521                           po_fhz    out varchar2,
    1522                           po_msg    out varchar2) is
    1523     v_name     varchar2(200);
    1524     v_ac01_row ac01%rowtype;
    1525     v_fhz      varchar2(200);
    1526     v_msg      varchar2(200);
    1527     v_procName varchar2(200);
    1528     v_params   varchar2(400);
    1529     procedure print_name(pi_para1 in varchar2,
    1530                          pi_para2 in varchar2,
    1531                          po_name  out varchar2) is
    1532     begin
    1533       po_name := pi_para1 || pi_para2;
    1534     exception
    1535       when others then
    1536         po_name := '没有成功拼接两个入参';
    1537     end print_name;
    1538   
    1539     procedure getAc01(pi_aab001 in number,
    1540                       po_ac01   out ac01%rowtype,
    1541                       po_fhz    out varchar2,
    1542                       po_msg    out varchar2) is
    1543       v_procName varchar2(200);
    1544       v_params   varchar2(400);
    1545       v_sqlcode  varchar2(500);
    1546       v_sqlerrm  varchar2(500);
    1547     begin
    1548       --初始化
    1549       v_procName := 'pkg_weiyl.getAc01';
    1550       v_params   := 'pi_aab001=' || pi_aab001;
    1551       -- 这里是因为模拟 rowtype数据类型的情况,所以条件中加了 rownum=1 ,以确保select into 的时候只有一条数据 ,
    1552       select a.*
    1553         into po_ac01
    1554         from ac01 a
    1555        where a.aab001 = pi_aab001
    1556          and rownum = 1;
    1557     exception
    1558       when others then
    1559         v_sqlcode := sqlcode;
    1560         v_sqlerrm := sqlerrm;
    1561         po_fhz    := v_procName || '_001';
    1562         /* PKG_FUN.F_ERRMSG(V_PROCNAME, SQLCODE, SQLERRM, V_PARAMS);*/
    1563         po_msg := pkg_fun.F_ERRMSG(v_procName, sqlcode, sqlerrm, v_params);
    1564         pkg_weiyltools.get_e_msg(sqlerrm,
    1565                                  'po_ac01',
    1566                                  'AAB001',
    1567                                  pi_aab001,
    1568                                  ' where 条件',
    1569                                  po_fhz,
    1570                                  po_msg);
    1571         return;
    1572     end getAc01;
    1573   
    1574   begin
    1575     --初始化 返回值
    1576   
    1577     po_fhz := '-1';
    1578     po_msg := '失败';
    1579     --初始化
    1580     v_procName := 'pkg_weiyl.testNestedPro';
    1581     v_params   := 'pi_aab001=' || pi_aab001;
    1582     print_name(pi_xing, pi_ming, v_name);
    1583     if (length(v_name) > 100) then
    1584       po_msg := '拼接的字符串太长!';
    1585     else
    1586       po_msg := '成功拼接,拼接好的字符串为:' || v_name;
    1587     end if;
    1588     begin
    1589       /*select aac002 into v_test from ac01 where aac001 = 1234;*/
    1590       -- 20160801 注释 
    1591       /*update ac01
    1592         set aac001 = 1000035129
    1593       where aac002 = '511011198604126824';*/
    1594       begin
    1595         getAc01(pi_aab001, v_ac01_row, v_fhz, v_msg);
    1596         if v_fhz != '1' then
    1597           po_fhz := po_fhz || v_fhz;
    1598           po_msg := po_msg || v_msg;
    1599           return;
    1600         else
    1601           insert into ac01_temp
    1602           values
    1603             (v_ac01_row.BAE001,
    1604              v_ac01_row.AAB001,
    1605              v_ac01_row.AAC001,
    1606              v_ac01_row.CAC002,
    1607              v_ac01_row.AAC058,
    1608              v_ac01_row.AAC002,
    1609              v_ac01_row.AAC003,
    1610              v_ac01_row.AAC004,
    1611              v_ac01_row.AAC006,
    1612              v_ac01_row.AAC007,
    1613              v_ac01_row.CAC089,
    1614              v_ac01_row.CAC090,
    1615              v_ac01_row.AAC027,
    1616              v_ac01_row.CAC005,
    1617              v_ac01_row.AAC009,
    1618              v_ac01_row.AAC013,
    1619              v_ac01_row.AAE473,
    1620              v_ac01_row.AAC020,
    1621              v_ac01_row.CAC007,
    1622              v_ac01_row.CAC008,
    1623              v_ac01_row.CAC009,
    1624              v_ac01_row.AAE200,
    1625              v_ac01_row.CAC010,
    1626              v_ac01_row.CAC011,
    1627              v_ac01_row.CAC012,
    1628              v_ac01_row.AAZ099,
    1629              v_ac01_row.CAC121,
    1630              v_ac01_row.CAE383,
    1631              v_ac01_row.CAC161,
    1632              v_ac01_row.AAE341,
    1633              v_ac01_row.CAC201,
    1634              v_ac01_row.CAC202,
    1635              v_ac01_row.AAC015,
    1636              v_ac01_row.AAC016,
    1637              v_ac01_row.AAE013,
    1638              v_ac01_row.CIE500,
    1639              v_ac01_row.CIE501,
    1640              v_ac01_row.AAC109,
    1641              v_ac01_row.CIE503,
    1642              v_ac01_row.CAC542,
    1643              v_ac01_row.CAC546,
    1644              v_ac01_row.CAC547,
    1645              v_ac01_row.CAC549,
    1646              v_ac01_row.AAB401,
    1647              v_ac01_row.CKC695,
    1648              v_ac01_row.CKE814,
    1649              v_ac01_row.CAC560,
    1650              v_ac01_row.CAC563,
    1651              v_ac01_row.CAC564,
    1652              v_ac01_row.JB_AAE200,
    1653              v_ac01_row.CAC561_DISUSE);
    1654         end if;
    1655       exception
    1656         when others then
    1657           po_fhz := v_procName || '_02';
    1658           po_msg := pkg_fun.F_ERRMSG(v_procName, sqlcode, sqlerrm, v_params);
    1659           return;
    1660       end;
    1661     exception
    1662       when others then
    1663         pkg_weiyltools.get_e_msg(sqlerrm,
    1664                                  'AC01',
    1665                                  'aac001',
    1666                                  '1000035129',
    1667                                  ' where aac002 = 511011198604126824',
    1668                                  po_fhz,
    1669                                  po_msg);
    1670         return;
    1671     end;
    1672   
    1673   exception
    1674     when others then
    1675       po_fhz := '-1';
    1676       po_msg := '失败';
    1677   end testNestedPro;
    1678   /*触摸屏查询标记*/
    1679   procedure cancelCmp(PI_SERIALNUM in varchar2,
    1680                       po_fhz       out varchar2,
    1681                       po_msg       out varchar2) is
    1682     v_Prc     varchar2(40);
    1683     v_Prcname varchar2(50);
    1684     v_Params  varchar2(400);
    1685     v_Sqlerrm varchar2(100);
    1686   begin
    1687     --初始化
    1688     -- 初始化返回值
    1689     Po_Fhz    := '1';
    1690     Po_Msg    := '';
    1691     v_Prc     := '.updateIDCard';
    1692     v_Prcname := c_Pkg_Name || v_Prc;
    1693     v_Params  := ',传入参数为:PI_SERIALNUM=' || PI_SERIALNUM;
    1694     update printserialnum
    1695        set bce326 = '1'
    1696      where SERIALNUM = PI_SERIALNUM
    1697        and bce326 <> '1';
    1698   exception
    1699     when others then
    1700       v_Sqlerrm := Substr(Sqlerrm, 1, 9);
    1701       /* 捕获,无效数字*/
    1702       If v_Sqlerrm = 'ORA-01722' Then
    1703         Po_Fhz := v_Prcname || '_3';
    1704         Po_Msg := '数据库报错,提示无效数字,可能的原因是:入参:' || PI_SERIALNUM ||
    1705                   '可能是数值型,应该为字符串类型';
    1706         return;
    1707       else
    1708         po_fhz := v_Prcname || '_1';
    1709         po_msg := Pkg_Fun.f_Errmsg(v_Prcname, Sqlcode, Sqlerrm, v_Params);
    1710         return;
    1711       end if;
    1712   end cancelCmp;
    1713 
    1714   /*取消征集通知单*/
    1715   procedure cancelAaz288(PI_OPERID in varchar2,
    1716                          PI_AAZ288 in varchar2,
    1717                          po_fhz    out varchar2,
    1718                          po_msg    out varchar2) is
    1719     v_cnt_ab07 number(3);
    1720     v_cnt_ad21 number(2);
    1721     v_cnt_ac43 number(4);
    1722     v_Prc      varchar2(400);
    1723     v_aae111   ad21.aae111%type;
    1724   begin
    1725     -- 初始化返回值
    1726     Po_Fhz := '1';
    1727     Po_Msg := '成功';
    1728     v_Prc  := '.cancelAaz288';
    1729     /*校验*/
    1730     select distinct (aae111)
    1731       into v_aae111
    1732       from V_BXGX_JJGL_ZZZJ_DWZSJHMX
    1733      where aaz288 = PI_AAZ288;
    1734     if v_aae111 <> '0' then
    1735       Po_Fhz := '-11';
    1736       Po_Msg := '征收计划的到账标识不为【未到账】';
    1737       return;
    1738     end if;
    1739     /*更新ab07*/
    1740     select count(1) into v_cnt_ab07 from ab07 where aaz288 = PI_AAZ288;
    1741     if v_cnt_ab07 > 0 then
    1742       update ab07 set aaz288 = null where aaz288 = PI_AAZ288;
    1743     end if;
    1744     /*更新ad21*/
    1745     select count(1) into v_cnt_ad21 from ad21 where aaz288 = PI_AAZ288;
    1746     if v_cnt_ad21 > 0 then
    1747       update ad21
    1748          set cae033 = 2,
    1749              cae030 = PI_OPERID,
    1750              cae031 = to_char(sysdate, 'yyyymmddhh24miss')
    1751        where aaz288 = PI_AAZ288;
    1752     end if;
    1753     /*更新ab43*/
    1754     select count(1) into v_cnt_ac43 from ac43 where aaz288 = PI_AAZ288;
    1755     if v_cnt_ac43 > 0 then
    1756       update ac43 set aaz288 = '' where aaz288 = PI_AAZ288;
    1757     end if;
    1758   exception
    1759     when others then
    1760       -- Sqlcode, Sqlerrm
    1761       Po_Fhz := '-1';
    1762       Po_Msg := '过程' || Pkg_Name || v_Prc || '报错,ac01表里没有找到该人员';
    1763   end cancelAaz288;
    1764   /*删除知识库核销的附件内容,否则数据里的不必要的附件会越来越多*/
    1765   procedure deleteZskFile(PI_CAE232 in varchar2,
    1766                           po_fhz    out varchar2,
    1767                           po_msg    out varchar2) IS
    1768     v_cae232_cnt number(4);
    1769     v_Prc        varchar2(100);
    1770     v_Prcname    varchar2(100);
    1771     v_Params     varchar2(400);
    1772   begin
    1773     --初始化
    1774     Po_Fhz    := '1';
    1775     Po_Msg    := '成功';
    1776     v_Prc     := '.updateIDCard';
    1777     v_Prcname := c_Pkg_Name || v_Prc;
    1778     v_Params  := ',传入参数为:PI_CAE232=' || PI_CAE232;
    1779     select count(1)
    1780       into v_cae232_cnt
    1781       from wyl_file a
    1782      where a.cae232 = PI_CAE232;
    1783     if v_cae232_cnt > 0 then
    1784       delete from wyl_file where cae232 = PI_CAE232;
    1785     end if;
    1786     --异常
    1787   exception
    1788     when others then
    1789       Po_Msg := Pkg_Fun.f_Errmsg(v_Prcname, Sqlcode, Sqlerrm, v_Params);
    1790       Po_Fhz := '-1';
    1791   end deleteZskFile;
    1792   /*
    1793     生成项目明细统计报表数据
    1794   */
    1795   procedure generatexmmx(pi_ksrq in varchar2,
    1796                          pi_zzrq in varchar2,
    1797                          po_fhz  out varchar2,
    1798                          po_msg  out varchar2) is
    1799     v_count  number(3);
    1800     v_tongji fw_xmmx%rowtype;
    1801     cursor cur_fw_xmmx is
    1802       select *
    1803         from fw_xmmx
    1804        where aae008 >= pi_ksrq
    1805          and aae008 <= pi_zzrq;
    1806     cursor cur_jhnywc is
    1807     --计划内完成验证的
    1808       select a.bae010, count(1) num1
    1809         from fw_xmmx a
    1810        where a.aae008 >= pi_ksrq
    1811          and a.aae008 <= pi_zzrq
    1812          and a.aae022 = '01'
    1813          and a.aae026 = '1'
    1814          and cae011 = '04'
    1815        group by a.bae010;
    1816   
    1817     cursor cur_jhwywc is
    1818     --计划外完成验证的
    1819       select a.bae010, count(1) num1
    1820         from fw_xmmx a
    1821        where a.aae008 >= pi_ksrq
    1822          and a.aae008 <= pi_zzrq
    1823          and a.aae022 = '02'
    1824          and a.aae026 = '1'
    1825          and cae011 = '04'
    1826        group by a.bae010;
    1827   
    1828     cursor cur_jhnwwc is
    1829     --计划内未完成验证的  3
    1830       select a.bae010, count(1) num2
    1831         from fw_xmmx a
    1832        where a.aae008 >= pi_ksrq
    1833          and a.aae008 <= pi_zzrq
    1834          and a.aae022 = '01'
    1835          and a.aae026 is null
    1836          and cae011 <> '04'
    1837          and cae011 <> '05'
    1838        group by a.bae010;
    1839   
    1840     cursor cur_jhwwwc is
    1841     --计划外未完成验证的  
    1842       select a.bae010, count(1) num2
    1843         from fw_xmmx a
    1844        where a.aae008 >= pi_ksrq
    1845          and a.aae008 <= pi_zzrq
    1846          and a.aae022 = '02'
    1847          and a.aae026 is null
    1848          and cae011 <> '04'
    1849          and cae011 <> '05'
    1850        group by a.bae010;
    1851   
    1852     cursor cur_jhnywc_gs is
    1853     --计划内完成工时  4
    1854       select a.bae010, sum(a.aae018) jhgs, sum(a.aae019) sjgs
    1855         from fw_xmmx a
    1856        where a.aae008 >= pi_ksrq
    1857          and a.aae008 <= pi_zzrq
    1858          and a.aae022 = '01'
    1859          and a.aae026 = '1'
    1860          and cae011 = '04'
    1861        group by a.bae010;
    1862   
    1863     cursor cur_jhwywc_gs is
    1864     --计划外完成工时  
    1865       select a.bae010, sum(a.aae018) jhgs, sum(a.aae019) sjgs
    1866         from fw_xmmx a
    1867        where a.aae008 >= pi_ksrq
    1868          and a.aae008 <= pi_zzrq
    1869          and a.aae022 = '02'
    1870          and a.aae026 = '1'
    1871          and cae011 = '04'
    1872        group by a.bae010;
    1873   
    1874     cursor cur_jhnwwc_gs is
    1875     --计划内未完成工时
    1876       select a.bae010, sum(a.aae018) jhgs, sum(a.aae019) sjgs
    1877         from fw_xmmx a
    1878        where a.aae008 >= pi_ksrq
    1879          and a.aae008 <= pi_zzrq
    1880          and a.aae022 = '01'
    1881          and a.aae026 is null
    1882          and cae011 <> '04'
    1883          and cae011 <> '05'
    1884        group by a.bae010;
    1885   
    1886     cursor cur_jhwwwc_gs is
    1887     --计划外未完成工时
    1888       select a.bae010, sum(a.aae018) jhgs, sum(a.aae019) sjgs
    1889         from fw_xmmx a
    1890        where a.aae008 >= pi_ksrq
    1891          and a.aae008 <= pi_zzrq
    1892          and a.aae022 = '02'
    1893          and a.aae026 is null
    1894          and cae011 <> '04'
    1895          and cae011 <> '05'
    1896        group by a.bae010;
    1897   
    1898   begin
    1899     po_fhz := '1';
    1900     po_msg := '成功';
    1901     delete from fw_xmmx_tongji;
    1902     insert into fw_xmmx_tongji
    1903       (bae010)
    1904       select AAA102 from aa10 where aaa100 = 'BAE010';
    1905     /*循环插入计划内 已经 完成验证的*/
    1906     for v_cur in cur_jhnywc loop
    1907       update fw_xmmx_tongji
    1908          set jhn_ywc = v_cur.num1, ksrq = pi_ksrq, zzrq = pi_zzrq
    1909        where bae010 = v_cur.bae010;
    1910       null;
    1911     end loop;
    1912   
    1913     /*循环插入计划外 已经 完成验证的*/
    1914     for v_cur_ in cur_jhwywc loop
    1915       update fw_xmmx_tongji
    1916          set jhw_ywc = v_cur_.num1, ksrq = pi_ksrq, zzrq = pi_zzrq
    1917        where bae010 = v_cur_.bae010;
    1918       null;
    1919     end loop;
    1920   
    1921     /*循环更新计划内 未 完成验证的*/
    1922     for v_cur2 in cur_jhnwwc loop
    1923       update fw_xmmx_tongji k
    1924          set jhn_wwc = v_cur2.num2
    1925        where k.bae010 = v_cur2.bae010;
    1926       null;
    1927     end loop;
    1928   
    1929     /*循环更新计划外 未 完成验证的*/
    1930     for v_cur2_ in cur_jhwwwc loop
    1931       update fw_xmmx_tongji k
    1932          set jhw_wwc = v_cur2_.num2
    1933        where k.bae010 = v_cur2_.bae010;
    1934       null;
    1935     end loop;
    1936   
    1937     /*计划内完成工时  3 */
    1938     for v_cur3 in cur_jhnywc_gs loop
    1939       /*update fw_xmmx_tongji k set jhn_ywcgs= v_cur3.jhgs,jhn_ where k.bae010 = v_cur2.bae010;*/
    1940       update fw_xmmx_tongji k
    1941          set jhn_ywcgs = v_cur3.jhgs, jhn_ywcgs_sj = v_cur3.sjgs
    1942        where k.bae010 = v_cur3.bae010;
    1943       null;
    1944     end loop;
    1945   
    1946     /*计划外完成工时  3 */
    1947     for v_cur3_ in cur_jhwywc_gs loop
    1948       /*update fw_xmmx_tongji k set jhn_ywcgs= v_cur3.jhgs,jhn_ where k.bae010 = v_cur2.bae010;*/
    1949       update fw_xmmx_tongji k
    1950          set jhw_ywcgs = v_cur3_.jhgs, jhw_ywcgs_sj = v_cur3_.sjgs
    1951        where k.bae010 = v_cur3_.bae010;
    1952       null;
    1953     end loop;
    1954   
    1955     /*计划内未完成工时  4*/
    1956     for v_cur4 in cur_jhnwwc_gs loop
    1957       update fw_xmmx_tongji k
    1958          set jhn_ywcgs = v_cur4.jhgs, jhn_ywcgs_sj = v_cur4.sjgs
    1959        where k.bae010 = v_cur4.bae010;
    1960       null;
    1961     end loop;
    1962   
    1963     /*计划外未完成工时  4*/
    1964     for v_cur4_ in cur_jhwwwc_gs loop
    1965       update fw_xmmx_tongji k
    1966          set jhw_ywcgs = v_cur4_.jhgs, jhw_ywcgs_sj = v_cur4_.sjgs
    1967        where k.bae010 = v_cur4_.bae010;
    1968       null;
    1969     end loop;
    1970   
    1971     null;
    1972   end;
    1973   /* 
    1974     修正sic86 的单位编号,以sic84.aab001为依据, 用于pkg_zhgl.Ylgrzh_Cxtj,以弥补重新统计过程的缺陷 
    1975     add by weiyongle 20160506
    1976   */
    1977   procedure rebuild_sic86(pi_aac001 in varchar2,
    1978                           po_fhz    out varchar2,
    1979                           po_msg    out varchar2) is
    1980     v_cae121    sic84.aae002%type;
    1981     v_cnt_sic86 number(2);
    1982     v_cnt_ac20  number(2);
    1983     v_aab001    sic86.aab001%type;
    1984     v_aae041    ac20.aae041%type;
    1985     v_ksny      sic86.aae001%type;
    1986     v_zzny      sic86.aae001%type;
    1987     cursor c_aae002_sic84 is
    1988       select max(cae121) cae121, aab001
    1989         from sic84
    1990        where aac001 = pi_aac001
    1991        group by substr(aae002, 1, 4), aab001
    1992        order by cae121;
    1993   begin
    1994     --初始化参数
    1995     po_fhz := '-1';
    1996     po_msg := '成功';
    1997     for v_cur in c_aae002_sic84 loop
    1998       v_cae121 := v_cur.cae121;
    1999       select count(1)
    2000         into v_cnt_sic86
    2001         from sic86
    2002        where aac001 = pi_aac001
    2003          and aae001 = substr(v_cae121, 1, 4);
    2004       begin
    2005         if v_cnt_sic86 != 1 then
    2006           po_fhz := '-1';
    2007           po_msg := '该人员' || pi_aac001 || '' || substr(v_cae121, 1, 4) ||
    2008                     '年度有多条个人养老账户,请核查!';
    2009           return;
    2010         end if;
    2011         /*update sic86
    2012           set aab001 = v_cur.aab001
    2013         where aac001 = pi_aac001
    2014           and aae001 = substr(v_aae002, 1, 4);*/
    2015         update sic86
    2016            set aab001 =
    2017                (select aab001
    2018                   from sic84
    2019                  where aac001 = pi_aac001
    2020                       /* 必须按照cae121来 判断,而不能用 aae002来判断 ,否则有些情况会出问题 */
    2021                    and cae121 = v_cur.cae121)
    2022          where aac001 = pi_aac001
    2023            and aae001 = substr(v_cae121, 1, 4);
    2024       exception
    2025         when others then
    2026           po_fhz := '-2';
    2027           po_msg := '更新人员' || pi_aac001 || ',' || substr(v_cae121, 1, 4) ||
    2028                     '年度的养老账户时发生系统错误!';
    2029           return;
    2030       end;
    2031     end loop;
    2032     /*select min(substr(aae041,1,4)) from ac20 where aac001 = 1000194637;-- ksny 
    2033     select min(substr(cae121,1,4))-1 from sic84 where aac001 = 1000194637; -- zzny */
    2034     -- add by weiyongle 20160527
    2035     begin
    2036       select min(substr(aae041, 1, 4))
    2037         into v_ksny
    2038         from ac20
    2039        where aac001 = pi_aac001;
    2040       select min(substr(cae121, 1, 4))
    2041         into v_zzny
    2042         from sic84
    2043        where aac001 = pi_aac001;
    2044       /*
    2045       如果ac20的最小年份小于sic84的最小年份,
    2046       那么从ac20的最小年份到sic84最小年份的上一年开始循环
    2047       */
    2048       if v_ksny < v_zzny then
    2049         v_zzny := v_zzny - 1;
    2050         for i in v_ksny .. v_zzny loop
    2051           begin
    2052             select max(aae041)
    2053               into v_aae041
    2054               from ac20
    2055              where aac001 = pi_aac001
    2056                and substr(aae041, 1, 4) = i;
    2057             select count(1)
    2058               into v_cnt_ac20
    2059               from ac20
    2060              where aac001 = pi_aac001
    2061                and aae041 = v_aae041;
    2062             /*如果最小年份有多条开始月份相同的的ac20记录,那么报错*/
    2063             if v_cnt_ac20 > 1 then
    2064               po_fhz := '-2';
    2065               po_msg := '改人员的养老历史账户在' || i || '年度有多条以' || v_aae041 ||
    2066                         '作为开始年月的记录,不符合常理,请先到历史维护模块进行数据修正';
    2067               return;
    2068             else
    2069               select aab001
    2070                 into v_aab001
    2071                 from ac20 b
    2072                where aac001 = pi_aac001
    2073                  and b.aae041 = v_aae041;
    2074             end if;
    2075           end;
    2076         
    2077           /*update sic86
    2078             set aab001 =
    2079                 (select aab001
    2080                    from ac20 b 
    2081                   where aac001 = pi_aac001 and substr(b.aae041, 1, 4) = v_ksny)
    2082           where aac001 = pi_aac001
    2083             and aae001 = i;*/
    2084           update sic86
    2085              set aab001 = v_aab001
    2086            where aac001 = pi_aac001
    2087              and aae001 = i;
    2088         end loop;
    2089       end if;
    2090     end;
    2091   
    2092   end rebuild_sic86;
    2093 
    2094   procedure rebuild_ab07(pi_aab001 in varchar2,
    2095                          pi_ksny   in varchar2,
    2096                          pi_zzny   in varchar2,
    2097                          pi_aae140 in varchar2,
    2098                          po_fhz    out varchar2,
    2099                          po_msg    out varchar2) is
    2100   
    2101     cursor c_ac43 is
    2102       select *
    2103         from ac43
    2104        where aab001 = pi_aab001
    2105          and aaz288 is null;
    2106   begin
    2107   
    2108     /*for i in ksny .. zzny loop
    2109       null;
    2110       pkg_yuejie.dwzjjh_cxtj_aae140(pi_aab001,
    2111                                 pi_aae002 => :pi_aae002,
    2112                                 pi_aae140 => :pi_aae140,
    2113                                 po_fhz => :po_fhz,
    2114                                 po_msg => :po_msg);
    2115     end loop;*/
    2116     --初始化参数
    2117     po_fhz := '1';
    2118     po_msg := '成功';
    2119     /*for v_cur in c_ac43 loop
    2120       pkg_yuejie.dwzjjh_cxtj_aae140(pi_aab001,
    2121                                     v_cur.aae002,
    2122                                     '110',
    2123                                     po_fhz,
    2124                                     po_msg);
    2125     end loop;*/
    2126   
    2127     for i in pi_ksny .. pi_zzny loop
    2128       pkg_yuejie.dwzjjh_cxtj_aae140(pi_aab001,
    2129                                     i,
    2130                                     pi_aae140,
    2131                                     po_fhz,
    2132                                     po_msg);
    2133     end loop;
    2134   
    2135   exception
    2136     when others then
    2137       po_fhz := '-1';
    2138       po_msg := '失败';
    2139       return;
    2140   end rebuild_ab07;
    2141 
    2142   /*Pkg_Ryhb_Pl_New   
    2143   --批量合并,初始数据生成
    2144   Procedure Plhb_Start(Pi_Bae001 In Varchar2,
    2145                        Pi_Aab001 In Number,
    2146                        Pi_Jbr    In Varchar2, --- 10000641
    2147                        Po_Fhz    Out Varchar2,
    2148                        Po_Msg    Out Varchar2)
    2149   */
    2150   procedure generate_plhb_data(pi_bae001 in varchar2,
    2151                                po_fhz    out varchar2,
    2152                                po_msg    out varchar2) is
    2153     cursor cur_dwxx is
    2154       select * from ae01 where bae001 = pi_bae001;
    2155   begin
    2156     -- 初始化
    2157     po_msg := '成功';
    2158     po_fhz := '1';
    2159     for v_cur in cur_dwxx loop
    2160       Pkg_Ryhb_Pl_New.Plhb_Start(pi_bae001,
    2161                                  v_cur.aab001,
    2162                                  '10000641',
    2163                                  po_fhz,
    2164                                  po_msg);
    2165     end loop;
    2166   exception
    2167     when others then
    2168       po_msg := '失败';
    2169       po_fhz := '-1';
    2170   end;
    2171   /*查询知识库数据*/
    2172   procedure queryZSK(PI_AAE906 in varchar2,
    2173                      PO_AAE202 out varchar2,
    2174                      PO_AAE008 out varchar2,
    2175                      po_fhz    out varchar2,
    2176                      po_msg    out varchar2) is
    2177     v_cnt number(2);
    2178     cursor c_zsk is
    2179       select * from fw_zsk where aae906 = pi_aae906;
    2180   begin
    2181     -- 初始化参数
    2182     po_fhz := '1';
    2183     po_msg := '获取数据成功!';
    2184     select count(1) into v_cnt from fw_zsk where aae906 = pi_aae906;
    2185     if v_cnt = 1 then
    2186       for v_zsk in c_zsk loop
    2187         po_aae202 := v_zsk.aae202;
    2188         po_aae008 := v_zsk.aae008;
    2189       end loop;
    2190     else
    2191       po_fhz := '-1';
    2192       po_msg := '_9,返回值过多';
    2193     end if;
    2194   end queryZSK;
    2195   /*
    2196   生成失地农民汇总数据
    2197   by weiyongel 20160519
    2198   */
    2199   procedure generate_sdnmhzsj(PI_BAE001 in varchar2,
    2200                               po_fhz    out varchar2,
    2201                               po_msg    out varchar2) is
    2202     v_aab383 ic51.aab383%type;
    2203     v_aic452 ic51.aic452%type;
    2204     v_aic453 ic51.aic453%type;
    2205     v_rs     ic5152_hzb.rs%type;
    2206     v_cnt    number(2);
    2207     cursor c_Ic5152_Temp is
    2208       select *
    2209         from Ic5152_Temp
    2210        where bae001 = pi_bae001
    2211          and imp_flag = '1'
    2212          and zfbtfs <> null;
    2213   begin
    2214     -- 初始化参数
    2215     po_fhz := '1';
    2216     po_msg := '数据汇总成功!';
    2217     /*for v_c_Ic5152_Temp in c_Ic5152_Temp loop
    2218       
    2219       null;
    2220     end loop;*/
    2221     begin
    2222       select count(1) into v_cnt from ic5152_hzb where bae001 = pi_bae001;
    2223       /*如果大于0,那么就先清除这个汇总表*/
    2224       if v_cnt > 0 then
    2225         delete from ic5152_hzb where bae001 = pi_bae001;
    2226       end if;
    2227     end;
    2228     select sum(nvl(aab383, 0))
    2229       into v_aab383
    2230       from Ic5152_Temp
    2231      where bae001 = pi_bae001
    2232        and imp_flag = '1'
    2233        and zfbtfs is not null;
    2234     select count(distinct(aac002))
    2235       into v_rs
    2236       from Ic5152_Temp
    2237      where bae001 = pi_bae001
    2238        and imp_flag = '1'
    2239        and zfbtfs is not null;
    2240     select sum(nvl(aic452, 0))
    2241       into v_aic452
    2242       from Ic5152_Temp
    2243      where bae001 = pi_bae001
    2244        and imp_flag = '1'
    2245        and zfbtfs is not null;
    2246     select sum(nvl(aic453, 0))
    2247       into v_aic453
    2248       from Ic5152_Temp
    2249      where bae001 = pi_bae001
    2250        and imp_flag = '1'
    2251        and zfbtfs is not null;
    2252     insert into ic5152_hzb
    2253       (bae001, rs, aab383, aic452, aic453)
    2254     values
    2255       (PI_BAE001, v_rs, v_aab383, v_aic452, v_aic453);
    2256     -- 调用生成清理数据的过程
    2257     generate_sdnmqlsj(PI_BAE001, po_fhz, po_msg);
    2258   exception
    2259     when others then
    2260       po_fhz := '-1';
    2261       po_msg := 'pkg_weiyl.generate_sdnmhzsj 数据汇总失败!';
    2262       return;
    2263   end generate_sdnmhzsj;
    2264 
    2265   /*
    2266   生成失地农民清理数据
    2267   by weiyongel 20160519
    2268   */
    2269   procedure generate_sdnmqlsj(PI_BAE001 in varchar2,
    2270                               po_fhz    out varchar2,
    2271                               po_msg    out varchar2) is
    2272     v_aab383 ic51.aab383%type;
    2273     v_aic452 ic51.aic452%type;
    2274     v_aic453 ic51.aic453%type;
    2275     v_rs     ic5152_qlb .rs%type;
    2276     v_cnt    number(2);
    2277     cursor c_Ic5152_Temp is
    2278       select sum(nvl(a.aab383, 0)) aab383,
    2279              sum(nvl(a.aic453, 0)) aic453,
    2280              sum(nvl(a.aic452, 0)) aic452,
    2281              count(distinct(a.aac002)) rs,
    2282              a.aae001 aae001
    2283         from Ic5152_Temp a
    2284        where bae001 = PI_BAE001
    2285          and imp_flag = '1'
    2286          and zfbtfs is not null
    2287        group by aae001;
    2288   begin
    2289     -- 初始化参数
    2290     po_fhz := '1';
    2291     po_msg := '生成失地农民清理数据成功!';
    2292     begin
    2293       select count(1) into v_cnt from ic5152_qlb where bae001 = pi_bae001;
    2294       /*如果大于0,那么就先删除这个汇总表*/
    2295       if v_cnt > 0 then
    2296         delete from ic5152_qlb where bae001 = pi_bae001;
    2297       end if;
    2298     end;
    2299     for v_c_Ic5152_Temp in c_Ic5152_Temp loop
    2300       /*插入清理数据表 ,用于报表数据提取 */
    2301       insert into ic5152_qlb
    2302         (bae001, aae001, rs, aab383, aic452, aic453)
    2303       values
    2304         (PI_BAE001,
    2305          v_c_Ic5152_Temp.aae001,
    2306          v_c_Ic5152_Temp.rs,
    2307          v_c_Ic5152_Temp.Aab383,
    2308          v_c_Ic5152_Temp.Aic452,
    2309          v_c_Ic5152_Temp.Aic453);
    2310       null;
    2311     end loop;
    2312   
    2313   exception
    2314     when others then
    2315       po_fhz := '-1';
    2316       po_msg := 'pkg_weiyl.generate_sdnmhzsj 数据汇总失败!';
    2317       return;
    2318   end generate_sdnmqlsj;
    2319 
    2320   /*生成失地农民数据清理后的变化字段,用于查询失地农民数据清理模块*/
    2321   procedure generate_sdnmdatachange(PI_AAC001 in varchar2,
    2322                                     PI_AAZ288 in varchar2,
    2323                                     PO_FHZ    out varchar2,
    2324                                     PO_MSG    out varchar2) is
    2325     cursor c_ic51_bf is
    2326       select *
    2327         from ic51_bf
    2328        where aac001 = pi_aac001
    2329          and aaz288 = pi_aaz288;
    2330     cursor c_ic51 is
    2331       select *
    2332         from ic51
    2333        where aac001 = pi_aac001
    2334          and aaz288 = pi_aaz288;
    2335     v_cnt_bf     number(2);
    2336     v_aic443_tmp ic51_bf.aic443%type;
    2337   begin
    2338     /*--正常或暂停参保并且是老系统导入的可以修改个人缴费金额
    2339     Update Ic51
    2340        Set Aic443 = v_Ic5152_Temp.Aic443,
    2341            Aic444 = v_Ic5152_Temp.Aic444,
    2342            Aic020 = v_Ic5152_Temp.Aic020,
    2343            Aab383 = v_Ic5152_Temp.Aab383,
    2344            Aic446 = v_Ic5152_Temp.Aic446,
    2345            Aic452 = v_Ic5152_Temp.Aic452,
    2346            Aic448 = v_Ic5152_Temp.Aic448,
    2347            Aic453 = v_Ic5152_Temp.Aic453,
    2348            Aic021 = v_Ic5152_Temp.Aic021,
    2349            Aaa041 = v_Ic5152_Temp.Aaa041,
    2350            Aae002 = v_Ic5152_Temp.Aae002
    2351      Where Aac001 = v_Aac001
    2352        And Aaz288 = v_Ic5152_Temp.Aaz288
    2353        And Bce094 = '1'
    2354        And Aae016 = '1';*/
    2355     -- 初始化参数
    2356     po_fhz := '1';
    2357     po_msg := '生成变更记录数据成功!';
    2358     -- 1. 先做判断,如果已经生成了相应的变更记录,那么就先删除相应的变更记录表,然后重新生成最新的数据
    2359     begin
    2360       select count(1)
    2361         into v_cnt_bf
    2362         from ic5152_bg
    2363        where aac001 = pi_aac001
    2364          and aaz288 = pi_aaz288;
    2365       if v_cnt_bf > 0 then
    2366         delete from ic5152_bg
    2367          where aaz288 = pi_aaz288
    2368            and aac001 = pi_aac001;
    2369       end if;
    2370     end;
    2371     -- 2. 生成最新的变更记录表
    2372     for v_bf in c_ic51_bf loop
    2373       begin
    2374         -- 1 先插入aaz288,aac001,aae001,aae002等信息
    2375         insert into ic5152_bg
    2376           (aaz288, bae001, aac001, aae002, aae001)
    2377         values
    2378           (PI_AAZ288, v_bf.bae001, v_bf.aac001, v_bf.aae002, v_bf.aae001);
    2379         for v_ic51 in c_ic51 loop
    2380           -- a. 先直接更新变更记录表  
    2381           update ic5152_bg a
    2382              set a.aic020  = v_ic51.aic020,
    2383                  a.aic020_ = v_bf.aic020,
    2384                  a.aic443  = v_ic51.aic443,
    2385                  a.aic443_ = v_bf.aic443,
    2386                  a.aic444  = v_ic51.aic444,
    2387                  a.aic444_ = v_bf.aic444,
    2388                  a.aab383  = v_ic51.aab383,
    2389                  a.aab383_ = v_bf.aab383,
    2390                  a.aic446  = v_ic51.aic446,
    2391                  a.aic446_ = v_bf.aic446,
    2392                  a.aic452  = v_ic51.aic452,
    2393                  a.aic452_ = v_bf.aic452,
    2394                  a.aic448  = v_ic51.aic448,
    2395                  a.aic448_ = v_bf.aic448,
    2396                  a.aic453  = v_ic51.aic453,
    2397                  a.aic453_ = v_bf.aic453,
    2398                  a.aic021  = v_ic51.aic021,
    2399                  a.aic021_ = v_bf.aic021,
    2400                  a.aaa041  = v_ic51.aaa041,
    2401                  a.aaa041_ = v_bf.aaa041
    2402            where aaz288 = pi_aaz288;
    2403         
    2404           if v_ic51.aic443 != v_bf.aic443 then
    2405             update ic5152_bg
    2406                set aic443 = v_ic51.aic443, aic443_ = v_bf.aic443
    2407              where aaz288 = pi_aaz288;
    2408           end if;
    2409         
    2410           if v_ic51.aic444 != v_bf.aic444 then
    2411             update ic5152_bg
    2412                set aic444 = v_ic51.aic444, aic444_ = v_bf.aic444
    2413              where aaz288 = pi_aaz288;
    2414           end if;
    2415         
    2416           if v_ic51.aab383 != v_bf.aab383 then
    2417             update ic5152_bg
    2418                set aab383 = v_ic51.aab383, aab383_ = v_bf.aab383
    2419              where aaz288 = pi_aaz288;
    2420           end if;
    2421         
    2422         /*if v_ic51.aic443 != v_bf.aic443 then 
    2423                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 update ic5152_bg aic443,aic443_ set v_ic51.aic433,v_bf.aic443;
    2424                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               end if;
    2425                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               
    2426                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               if v_ic51.aic443 != v_bf.aic443 then 
    2427                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 update ic5152_bg aic443,aic443_ set v_ic51.aic433,v_bf.aic443;
    2428                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               end if;
    2429                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               
    2430                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               if v_ic51.aic443 != v_bf.aic443 then 
    2431                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 update ic5152_bg aic443,aic443_ set v_ic51.aic433,v_bf.aic443;
    2432                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               end if;*/
    2433         end loop;
    2434       exception
    2435         when others then
    2436           po_fhz := '-11';
    2437           po_msg := '生成变更记录数据失败!';
    2438       end;
    2439     end loop;
    2440   exception
    2441     when others then
    2442       po_fhz := '-1';
    2443       po_msg := '生成变更记录数据失败!';
    2444   end generate_sdnmdatachange;
    2445   /*检查ac35时间 ,增减员时用*/
    2446   procedure checkAC35Tim(PI_AAC002 in varchar2,
    2447                          pi_aab999 in varchar2,
    2448                          Po_AAE042 OUT varchar2,
    2449                          PO_FHZ    out varchar2,
    2450                          PO_MSG    out varchar2) is
    2451     v_cnt    number(3);
    2452     v_cnt2   number(12);
    2453     v_cnt3   number(12);
    2454     v_aac001 ac01.aac001%type;
    2455     v_aae042 ac35.aae042%type;
    2456     n_aab001 ae01.aab001%type;
    2457   begin
    2458     --初始化
    2459     -- 初始化参数
    2460     po_fhz := '1';
    2461     po_msg := 'success';
    2462     select count(1) into v_cnt from ac01 where aac002 = pi_aac002;
    2463   
    2464     if v_cnt > 0 then
    2465     
    2466       select aab001 into n_aab001 from ae01 where aab999 = pi_aab999;
    2467     
    2468       select nvl(max(aae042), '111111')
    2469         into Po_AAE042
    2470         from ac35
    2471        where aac001 in (select aac001 from ac01 where aac002 = pi_aac002)
    2472          and aab001 = n_aab001;
    2473     
    2474     else
    2475       Po_AAE042 := '111111';
    2476     end if;
    2477   exception
    2478     when others then
    2479       po_fhz := '-1';
    2480       po_msg := '获取ac35.aae042出错,success';
    2481   end checkAC35Tim;
    2482 
    2483   /* 重新统计ac43 aae002 ,20160526 */
    2484   procedure cxtj_ac43(PI_AAB001 in varchar2,
    2485                       PO_FHZ    out varchar2,
    2486                       PO_MSG    out varchar2) is
    2487     v_cnt    number(5);
    2488     v_cae122 ac43.cae122%type;
    2489     v_aae002 ac43.aae002%type;
    2490     cursor c_ac43 is
    2491       select *
    2492         from ac43
    2493        where aab001 = pi_aab001
    2494          and aaz288 is null;
    2495   begin
    2496     --初始化
    2497     -- 初始化参数
    2498     po_fhz := '1';
    2499     po_msg := 'success';
    2500     begin
    2501       select count(1)
    2502         into v_cnt
    2503         from ac43
    2504        where aab001 = pi_aab001
    2505          and aaz288 is null;
    2506       if v_cnt > 0 then
    2507         for v_cur_ac43 in c_ac43 loop
    2508           /*if v_cur_ac43.aae002 != v_cur_ac43.cae122 then
    2509             update ac43
    2510                set aae002 = v_cur_ac43.cae122
    2511              where aab001 = pi_aab001
    2512                and aaz288  is null 
    2513                and cae122 = v_cur_ac43.cae122;
    2514           end if;*/
    2515           update ac43
    2516              set aae002 = v_cur_ac43.cae122
    2517            where aab001 = pi_aab001
    2518              and aaz288 is null
    2519              and cae122 = v_cur_ac43.cae122;
    2520         end loop;
    2521       end if;
    2522     end;
    2523   end cxtj_ac43;
    2524 
    2525   procedure getAAC027(PI_AAC002 in varchar2,
    2526                       PO_AAC027 OUT varchar2,
    2527                       PO_FHZ    out varchar2,
    2528                       PO_MSG    out varchar2) IS
    2529     v_cnt    number(1);
    2530     v_aac027 ac01.aac027%type;
    2531   begin
    2532     --初始化
    2533     -- 初始化参数
    2534     po_fhz := '1';
    2535     po_msg := 'success';
    2536     select count(1) into v_cnt from ac01 where aac002 = pi_aac002;
    2537     if v_cnt > 0 then
    2538       select aac027 into v_aac027 from ac01 where aac002 = pi_aac002;
    2539       PO_AAC027 := v_aac027;
    2540     end if;
    2541   exception
    2542     when others then
    2543       po_fhz := '-1';
    2544       po_msg := 'error';
    2545   end getAAC027;
    2546 
    2547   /* for test ,20160530 */
    2548   procedure myInsert(PI_AAC002 in varchar2,
    2549                      PO_FHZ    out varchar2,
    2550                      PO_MSG    out varchar2) is
    2551   begin
    2552     --初始化
    2553     -- 初始化参数
    2554     po_fhz := '1';
    2555     po_msg := 'success';
    2556     insert into xzl_one (aac002) values (pi_aac002);
    2557   exception
    2558     when others then
    2559       po_fhz := '-1';
    2560       po_msg := 'error';
    2561   end myInsert;
    2562   /*统计 社会保险参保情况查询 */
    2563   procedure tongji_shbx_old(PI_AAC001 in varchar2,
    2564                             PO_FHZ    out varchar2,
    2565                             PO_MSG    out varchar2) is
    2566     v_cnt          number(2);
    2567     v_cic818       T_BXGX_SHBXCBQKCXJG_WYL.Cic818%type;
    2568     v_cic819       T_BXGX_SHBXCBQKCXJG_WYL.Cic819%type;
    2569     v_aae042_ac20  ac20.aae042%type;
    2570     v_aae041_ac20  ac20.aae041%type;
    2571     v_aae041_sac14 sac14.aae041%type;
    2572     v_aae042_sac14 sac14.aae042%type;
    2573     v_yf           number(2);
    2574     v_Prc          Varchar2(20);
    2575     v_Prcname      Varchar2(200);
    2576     v_Params       Varchar2(500);
    2577     cursor cur_t is
    2578       select count(1) cnt, aae001
    2579         from T_BXGX_SHBXCBQKCXJG_WYL
    2580        where aac001 = pi_aac001
    2581        group by aae001
    2582        order by aae001;
    2583   begin
    2584     -- 初始化返回值
    2585     Po_Fhz    := '1';
    2586     Po_Msg    := '';
    2587     v_Prc     := '.tongji_shbx';
    2588     v_Prcname := c_Pkg_Name || v_Prc;
    2589     v_Params  := ',传入参数为:pi_aac001=' || Pi_Aac001;
    2590     -- 自建表 T_BXGX_SHBXCBQKCXJG_WYL  1000745288 
    2591     /*
    2592          从这里取值,可以直接复制到  表 T_BXGX_SHBXCBQKCXJG_WYL 中
    2593           select bae001,
    2594           aae001,
    2595           aac001,
    2596           cac002,
    2597           aac003,
    2598           aac004,
    2599           aac002,
    2600           csrq,
    2601           cgrq,
    2602           aae200,
    2603           aab999,
    2604           aab004,
    2605           cic818,
    2606           sum(cic819) cic819,
    2607           aic058,
    2608           aic074,
    2609           aic072,
    2610           aic075,
    2611           aic076,
    2612           aic077,
    2613           aic078,
    2614           aic079,
    2615           aae087,
    2616           jfsm,
    2617           cbzt,
    2618           ccjfrq,
    2619           zmjfrq,
    2620           dqjfgz
    2621      from v_bxgx_shbxcbqkcxjg_xgy_
    2622     where aac001 = 1000745288
    2623     group by bae001,
    2624              aae001,
    2625              aac001,
    2626              cac002,
    2627              aac003,
    2628              aac004,
    2629              aac002,
    2630              csrq,
    2631              cgrq,
    2632              aae200,
    2633              aab999,
    2634              aab004,
    2635              cic818,
    2636              aic058,
    2637              aic074,
    2638              aic072,
    2639              aic075,
    2640              aic076,
    2641              aic077,
    2642              aic078,
    2643              aic079,
    2644              aae087,
    2645              jfsm,
    2646              cbzt,
    2647              ccjfrq,
    2648              zmjfrq,
    2649              dqjfgz order by aae001;*/
    2650     -- 清空临时表 
    2651     delete from T_BXGX_SHBXCBQKCXJG_WYL where aac001 = pi_aac001;
    2652     delete from T_BXGX_SHBXCBQKCXJG_WYL_ where aac001 = pi_aac001;
    2653     /*插入数据*/
    2654   
    2655     insert into T_BXGX_SHBXCBQKCXJG_WYL
    2656       select bae001,
    2657              aac001,
    2658              cac002,
    2659              aac003,
    2660              aac004,
    2661              aac002,
    2662              csrq,
    2663              cgrq,
    2664              aae200,
    2665              aab999,
    2666              aab004,
    2667              aae001,
    2668              cic818,
    2669              sum(nvl(cic819, 0)) cic819,
    2670              aic058,
    2671              aic074,
    2672              aic072,
    2673              aic075,
    2674              aic076,
    2675              aic077,
    2676              aic078,
    2677              aic079,
    2678              aae087,
    2679              jfsm,
    2680              cbzt,
    2681              ccjfrq,
    2682              zmjfrq,
    2683              dqjfgz
    2684         from v_bxgx_shbxcbqkcxjg_xgy_
    2685        where aac001 = pi_aac001
    2686        group by bae001,
    2687                 aae001,
    2688                 aac001,
    2689                 cac002,
    2690                 aac003,
    2691                 aac004,
    2692                 aac002,
    2693                 csrq,
    2694                 cgrq,
    2695                 aae200,
    2696                 aab999,
    2697                 aab004,
    2698                 cic818,
    2699                 aic058,
    2700                 aic074,
    2701                 aic072,
    2702                 aic075,
    2703                 aic076,
    2704                 aic077,
    2705                 aic078,
    2706                 aic079,
    2707                 aae087,
    2708                 jfsm,
    2709                 cbzt,
    2710                 ccjfrq,
    2711                 zmjfrq,
    2712                 dqjfgz
    2713        order by aae001;
    2714     insert into T_BXGX_SHBXCBQKCXJG_WYL_
    2715       select * from T_BXGX_SHBXCBQKCXJG_WYL where aac001 = pi_aac001;
    2716     -- 判断是否有多条,有多条就算是有转入的
    2717     -- select count(1),aae001 into v_cnt from T_BXGX_SHBXCBQKCXJG_WYL where aac001 = pi_aac001 group by aae001 order by aae001;
    2718     for v_cur in cur_t loop
    2719     
    2720       if v_cur.cnt > 1 then
    2721         select sum(nvl(cic818, 0)) cic818_hj
    2722           into v_cic818
    2723           from T_BXGX_SHBXCBQKCXJG_WYL
    2724          where aae001 = v_cur.aae001;
    2725       
    2726         select sum(nvl(cic819, 0)) cic819_hj
    2727           into v_cic819
    2728           from T_BXGX_SHBXCBQKCXJG_WYL
    2729          where aae001 = v_cur.aae001;
    2730       
    2731         update T_BXGX_SHBXCBQKCXJG_WYL_ a
    2732            set a.cic818 = v_cic818
    2733          where aac001 = pi_aac001
    2734            and aae001 = v_cur.aae001;
    2735         -- 因为有两条,一条为转入,一条为本地,所以要 删除一条,然后更新
    2736         delete from T_BXGX_SHBXCBQKCXJG_WYL_
    2737          where aac001 = pi_aac001
    2738            and aae001 = v_cur.aae001
    2739            and aae087 = '1';
    2740         update T_BXGX_SHBXCBQKCXJG_WYL_ a
    2741            set a.cic819 = v_cic819
    2742          where aac001 = pi_aac001
    2743            and aae001 = v_cur.aae001;
    2744       end if;
    2745       -- 修正 转入的月份 
    2746       select aae042
    2747         into v_aae042_ac20
    2748         from ac20
    2749        where aac001 = pi_aac001
    2750          and aae140 = '110'
    2751          and substr(aae041, 1, 4) = v_cur.aae001;
    2752       select aae041
    2753         into v_aae041_ac20
    2754         from ac20
    2755        where aac001 = pi_aac001
    2756          and aae140 = '110'
    2757          and substr(aae041, 1, 4) = v_cur.aae001;
    2758     
    2759       select aae042
    2760         into v_aae042_sac14
    2761         from sac14
    2762        where aac001 = pi_aac001
    2763          and aae140 = '110'
    2764          and substr(aae041, 1, 4) = v_cur.aae001;
    2765       select aae041
    2766         into v_aae041_sac14
    2767         from sac14
    2768        where aac001 = pi_aac001
    2769          and aae140 = '110'
    2770          and substr(aae041, 1, 4) = v_cur.aae001;
    2771     
    2772       if v_aae042_ac20 <= v_aae041_sac14 or v_aae042_sac14 <= v_aae041_ac20 then
    2773         v_yf := v_aae042_ac20 - v_aae041_ac20 + 1 + v_aae042_sac14 -
    2774                 v_aae041_sac14 + 1;
    2775         -- 有重合的情况 
    2776       Elsif v_aae042_ac20 > v_aae041_sac14 and
    2777             v_aae042_ac20 < v_aae042_sac14 and
    2778             v_aae041_ac20 <= v_aae041_sac14 Then
    2779         v_yf := v_aae042_ac20 - v_aae041_ac20 + 1 + v_aae042_sac14 -
    2780                 v_aae041_sac14 + 1 - (v_aae042_ac20 - v_aae041_sac14 + 1);
    2781       Elsif v_aae042_ac20 > v_aae041_sac14 and
    2782             v_aae042_ac20 < v_aae042_sac14 and
    2783             v_aae041_ac20 >= v_aae041_sac14 Then
    2784         v_yf := v_aae042_ac20 - v_aae041_ac20 + 1 + v_aae042_sac14 -
    2785                 v_aae041_sac14 + 1 - (v_aae042_ac20 - v_aae041_ac20 + 1);
    2786       Elsif v_aae042_ac20 > v_aae041_sac14 and
    2787             v_aae042_ac20 < v_aae042_sac14 and
    2788             v_aae041_ac20 >= v_aae041_sac14 Then
    2789         v_yf := v_aae042_ac20 - v_aae041_ac20 + 1 + v_aae042_sac14 -
    2790                 v_aae041_sac14 + 1 - (v_aae042_ac20 - v_aae041_ac20 + 1);
    2791       Elsif v_aae042_ac20 > v_aae041_sac14 and
    2792             v_aae042_ac20 >= v_aae042_sac14 and
    2793             v_aae041_ac20 <= v_aae041_sac14 Then
    2794         v_yf := v_aae042_ac20 - v_aae041_ac20 + 1;
    2795       
    2796       Elsif v_aae042_ac20 >= v_aae042_sac14 and
    2797             v_aae041_ac20 > v_aae041_sac14 Then
    2798         v_yf := v_aae042_ac20 - v_aae041_ac20 + 1 +
    2799                 (v_aae042_sac14 - v_aae041_sac14 + 1) -
    2800                 (v_aae041_ac20 - v_aae041_sac14 + 1);
    2801       end if;
    2802       update T_BXGX_SHBXCBQKCXJG_WYL_ a
    2803          set a.cic818 = v_yf
    2804        where aac001 = pi_aac001
    2805          and aae001 = v_cur.aae001;
    2806     end loop;
    2807   
    2808   exception
    2809     when others then
    2810       Po_Fhz := v_Prcname || '_91,重新统计月份出错';
    2811       Po_Msg := Pkg_Fun.f_Errmsg(v_Prcname, Sqlcode, Sqlerrm, v_Params);
    2812     
    2813   end tongji_shbx_old;
    2814 
    2815   /*
    2816     20160801 修改
    2817   统计 社会保险参保情况查询 ,对应于 眉山市的养老对账单打印 模块 ,卫永乐*/
    2818   procedure tongji_shbx(PI_AAC001 in varchar2,
    2819                         PO_FHZ    out varchar2,
    2820                         PO_MSG    out varchar2) is
    2821     v_cnt          number(2);
    2822     v_cnt_sd       number(2);
    2823     v_cic818       T_BXGX_SHBXCBQKCXJG_WYL.Cic818%type;
    2824     v_cic818_sd    T_BXGX_SHBXCBQKCXJG_WYL.Cic818%type;
    2825     v_cic819       T_BXGX_SHBXCBQKCXJG_WYL.Cic819%type;
    2826     v_aae042_ac20  ac20.aae042%type;
    2827     v_aae041_ac20  ac20.aae041%type;
    2828     v_aae041_sac14 sac14.aae041%type;
    2829     v_aae042_sac14 sac14.aae042%type;
    2830     v_aae180_sac14 sac14.aae180%type;
    2831     v_yf           number(2);
    2832     v_Prc          Varchar2(20);
    2833     v_Prcname      Varchar2(200);
    2834     v_Params       Varchar2(500);
    2835     cursor cur_t is
    2836       select count(1) cnt, aae001
    2837         from T_BXGX_SHBXCBQKCXJG_WYL
    2838        where aac001 = pi_aac001
    2839          and aae087 in ('0', '1')
    2840        group by aae001
    2841        order by aae001;
    2842   begin
    2843     -- 初始化返回值
    2844     Po_Fhz    := '1';
    2845     Po_Msg    := '';
    2846     v_Prc     := '.tongji_shbx';
    2847     v_Prcname := c_Pkg_Name || v_Prc;
    2848     v_Params  := ',传入参数为:pi_aac001=' || Pi_Aac001;
    2849     -- 自建表 T_BXGX_SHBXCBQKCXJG_WYL  1000745288 
    2850     /*
    2851          从这里取值,可以直接复制到  表 T_BXGX_SHBXCBQKCXJG_WYL 中
    2852           select bae001,
    2853           aae001,
    2854           aac001,
    2855           cac002,
    2856           aac003,
    2857           aac004,
    2858           aac002,
    2859           csrq,
    2860           cgrq,
    2861           aae200,
    2862           aab999,
    2863           aab004,
    2864           cic818,
    2865           sum(cic819) cic819,
    2866           aic058,
    2867           aic074,
    2868           aic072,
    2869           aic075,
    2870           aic076,
    2871           aic077,
    2872           aic078,
    2873           aic079,
    2874           aae087,
    2875           jfsm,
    2876           cbzt,
    2877           ccjfrq,
    2878           zmjfrq,
    2879           dqjfgz
    2880      from v_bxgx_shbxcbqkcxjg_xgy_
    2881     where aac001 = 1000745288
    2882     group by bae001,
    2883              aae001,
    2884              aac001,
    2885              cac002,
    2886              aac003,
    2887              aac004,
    2888              aac002,
    2889              csrq,
    2890              cgrq,
    2891              aae200,
    2892              aab999,
    2893              aab004,
    2894              cic818,
    2895              aic058,
    2896              aic074,
    2897              aic072,
    2898              aic075,
    2899              aic076,
    2900              aic077,
    2901              aic078,
    2902              aic079,
    2903              aae087,
    2904              jfsm,
    2905              cbzt,
    2906              ccjfrq,
    2907              zmjfrq,
    2908              dqjfgz order by aae001;*/
    2909     -- 清空临时表 
    2910     delete from T_BXGX_SHBXCBQKCXJG_WYL where aac001 = pi_aac001;
    2911     delete from T_BXGX_SHBXCBQKCXJG_WYL_ where aac001 = pi_aac001;
    2912     /*插入数据*/
    2913   
    2914     insert into T_BXGX_SHBXCBQKCXJG_WYL
    2915       select bae001,
    2916              aac001,
    2917              cac002,
    2918              aac003,
    2919              aac004,
    2920              aac002,
    2921              csrq,
    2922              cgrq,
    2923              aae200,
    2924              aab999,
    2925              aab004,
    2926              aae001,
    2927              cic818,
    2928              sum(nvl(cic819, 0)) cic819,
    2929              aic058,
    2930              aic074,
    2931              aic072,
    2932              aic075,
    2933              aic076,
    2934              aic077,
    2935              aic078,
    2936              aic079,
    2937              aae087,
    2938              jfsm,
    2939              cbzt,
    2940              ccjfrq,
    2941              zmjfrq,
    2942              dqjfgz
    2943         from v_bxgx_shbxcbqkcxjg_xgy_
    2944        where aac001 = pi_aac001
    2945        group by bae001,
    2946                 aae001,
    2947                 aac001,
    2948                 cac002,
    2949                 aac003,
    2950                 aac004,
    2951                 aac002,
    2952                 csrq,
    2953                 cgrq,
    2954                 aae200,
    2955                 aab999,
    2956                 aab004,
    2957                 cic818,
    2958                 aic058,
    2959                 aic074,
    2960                 aic072,
    2961                 aic075,
    2962                 aic076,
    2963                 aic077,
    2964                 aic078,
    2965                 aic079,
    2966                 aae087,
    2967                 jfsm,
    2968                 cbzt,
    2969                 ccjfrq,
    2970                 zmjfrq,
    2971                 dqjfgz
    2972        order by aae001;
    2973     insert into T_BXGX_SHBXCBQKCXJG_WYL_
    2974       select * from T_BXGX_SHBXCBQKCXJG_WYL where aac001 = pi_aac001;
    2975     -- 判断是否有多条,有多条就算是有转入的
    2976     -- select count(1),aae001 into v_cnt from T_BXGX_SHBXCBQKCXJG_WYL where aac001 = pi_aac001 group by aae001 order by aae001;
    2977     for v_cur in cur_t loop
    2978     
    2979       if v_cur.cnt > 1 then
    2980         select sum(nvl(cic818, 0)) cic818_hj
    2981           into v_cic818
    2982           from T_BXGX_SHBXCBQKCXJG_WYL
    2983         -- altered by weiyongle
    2984          where aae001 = v_cur.aae001
    2985            and aac001 = pi_aac001;
    2986       
    2987         select sum(nvl(cic819, 0)) cic819_hj
    2988           into v_cic819
    2989           from T_BXGX_SHBXCBQKCXJG_WYL
    2990         -- altered by weiyongle 20160707
    2991          where aae001 = v_cur.aae001
    2992            and aac001 = pi_aac001;
    2993       
    2994         update T_BXGX_SHBXCBQKCXJG_WYL_ a
    2995            set a.cic818 = v_cic818
    2996          where aac001 = pi_aac001
    2997            and aae001 = v_cur.aae001;
    2998         -- 因为有两条,一条为转入,一条为本地,所以要 删除一条,然后更新
    2999         delete from T_BXGX_SHBXCBQKCXJG_WYL_
    3000          where aac001 = pi_aac001
    3001            and aae001 = v_cur.aae001
    3002            and aae087 = '1';
    3003         update T_BXGX_SHBXCBQKCXJG_WYL_ a
    3004            set a.cic819 = v_cic819
    3005          where aac001 = pi_aac001
    3006            and aae001 = v_cur.aae001;
    3007       
    3008         -- 修正 转入的月份 
    3009         select max(aae042)
    3010           into v_aae042_ac20
    3011           from ac20
    3012          where aac001 = pi_aac001
    3013            and aae140 = '110'
    3014            and substr(aae041, 1, 4) = v_cur.aae001
    3015               /*and aac402 = '0';*/
    3016            and aac402 in ('0', '1');
    3017         select min(aae041)
    3018           into v_aae041_ac20
    3019           from ac20
    3020          where aac001 = pi_aac001
    3021            and aae140 = '110'
    3022            and substr(aae041, 1, 4) = v_cur.aae001
    3023               /*and aac402 = '0';*/
    3024            and aac402 in ('0', '1');
    3025         select max(aae042)
    3026           into v_aae042_sac14
    3027           from sac14
    3028          where aac001 = pi_aac001
    3029            and aae140 = '110'
    3030            and substr(aae041, 1, 4) = v_cur.aae001;
    3031         select min(aae041)
    3032           into v_aae041_sac14
    3033           from sac14
    3034          where aac001 = pi_aac001
    3035            and aae140 = '110'
    3036            and substr(aae041, 1, 4) = v_cur.aae001;
    3037         -- 20160801 增加 sac14.aae180为空的 判断 
    3038         select nvl(aae180, 0)
    3039           into v_aae180_sac14
    3040           from sac14
    3041          where aac001 = pi_aac001
    3042            and aae140 = '110'
    3043            and substr(aae041, 1, 4) = v_cur.aae001;
    3044       
    3045         begin
    3046           /* add by weiyongle 20160719 
    3047           初始化v_yf,循环的时候 ,如果不初始化 变量那么在下一次循环的时候变量
    3048           还会保留上一次的值,导致在这一次的循环的数值不正确*/
    3049           v_yf := 0;
    3050           -- add by weiyongle 20160719 如果某一个变量为空,那么就不执行 
    3051           if v_aae042_ac20 = null or v_aae041_sac14 = null or
    3052              v_aae042_ac20 = null or v_aae041_ac20 = null then
    3053             return;
    3054           else
    3055             if v_aae042_ac20 <= v_aae041_sac14 or
    3056                v_aae042_sac14 <= v_aae041_ac20 then
    3057             
    3058               /*decode((v_aae042_sac14 - v_aae041_sac14 + 1) * nvl(a.aae180, 0),
    3059               0,
    3060               0,
    3061               (v_aae042_sac14 - v_aae041_sac14 + 1))
    3062               decode 函数在存储过程中不能使用 
    3063               pkg_weiyl.getMonthNum(v_aae041_sac14,v_aae042_sac14,v_aae180_sac14)
    3064               */
    3065             
    3066               /*v_yf := v_aae042_ac20 - v_aae041_ac20 + 1 + v_aae042_sac14 -
    3067               v_aae041_sac14 + 1;*/
    3068               v_yf := v_aae042_ac20 - v_aae041_ac20 + 1 +
    3069                       pkg_weiyl.getMonthNum(v_aae041_sac14,
    3070                                             v_aae042_sac14,
    3071                                             v_aae180_sac14);
    3072             
    3073               -- 有重合的情况 
    3074             Elsif v_aae042_ac20 > v_aae041_sac14 and
    3075                   v_aae042_ac20 < v_aae042_sac14 and
    3076                   v_aae041_ac20 <= v_aae041_sac14 Then
    3077               v_yf := v_aae042_ac20 - v_aae041_ac20 + 1 +
    3078                       pkg_weiyl.getMonthNum(v_aae041_sac14,
    3079                                             v_aae042_sac14,
    3080                                             v_aae180_sac14) -
    3081                       (v_aae042_ac20 - v_aae041_sac14 + 1);
    3082             Elsif v_aae042_ac20 > v_aae041_sac14 and
    3083                   v_aae042_ac20 < v_aae042_sac14 and
    3084                   v_aae041_ac20 >= v_aae041_sac14 Then
    3085               v_yf := v_aae042_ac20 - v_aae041_ac20 + 1 +
    3086                       pkg_weiyl.getMonthNum(v_aae041_sac14,
    3087                                             v_aae042_sac14,
    3088                                             v_aae180_sac14) -
    3089                       (v_aae042_ac20 - v_aae041_ac20 + 1);
    3090             Elsif v_aae042_ac20 > v_aae041_sac14 and
    3091                   v_aae042_ac20 < v_aae042_sac14 and
    3092                   v_aae041_ac20 >= v_aae041_sac14 Then
    3093               v_yf := v_aae042_ac20 - v_aae041_ac20 + 1 +
    3094                       pkg_weiyl.getMonthNum(v_aae041_sac14,
    3095                                             v_aae042_sac14,
    3096                                             v_aae180_sac14) -
    3097                       (v_aae042_ac20 - v_aae041_ac20 + 1);
    3098             Elsif v_aae042_ac20 > v_aae041_sac14 and
    3099                   v_aae042_ac20 >= v_aae042_sac14 and
    3100                   v_aae041_ac20 <= v_aae041_sac14 Then
    3101               v_yf := v_aae042_ac20 - v_aae041_ac20 + 1;
    3102             
    3103             Elsif v_aae042_ac20 >= v_aae042_sac14 and
    3104                   v_aae041_ac20 > v_aae041_sac14 Then
    3105               v_yf := v_aae042_ac20 - v_aae041_ac20 + 1 +
    3106                       (pkg_weiyl.getMonthNum(v_aae041_sac14,
    3107                                              v_aae042_sac14,
    3108                                              v_aae180_sac14)) -
    3109                       (v_aae041_ac20 - v_aae041_sac14 + 1);
    3110             end if;
    3111           end if;
    3112         end;
    3113       
    3114         -- 增加 失地农民账户类别的判断 add by weiyongle 20160728
    3115         --先清空 变量
    3116         begin
    3117           v_cic818_sd := 0;
    3118           v_cnt_sd    := 0;
    3119           select count(aac001)
    3120             into v_cnt_sd
    3121             from sic86
    3122            where aac001 = pi_aac001
    3123              and aae001 = v_cur.aae001
    3124              and aae087 = '2';
    3125           if v_cnt_sd > 0 then
    3126             select cic818
    3127               into v_cic818_sd
    3128               from sic86
    3129              where aac001 = pi_aac001
    3130                and aae001 = v_cur.aae001
    3131                and aae087 = '2';
    3132             v_yf := v_yf + v_cic818_sd;
    3133           end if;
    3134         end;
    3135       
    3136         -- 如果大于12,那么就设置为12 
    3137         if v_yf > 12 then
    3138           v_yf := 12;
    3139         end if;
    3140         update T_BXGX_SHBXCBQKCXJG_WYL_ a
    3141            set a.cic818 = v_yf
    3142          where aac001 = pi_aac001
    3143            and aae001 = v_cur.aae001;
    3144         update T_BXGX_SHBXCBQKCXJG_WYL_
    3145            set jfsm = cic818
    3146          where aac001 = pi_aac001;
    3147       
    3148         -- 针对 失地农民账户类别的判断 add by weiyongle 20160728
    3149         begin
    3150           v_cic818_sd := 0;
    3151           v_cnt_sd    := 0;
    3152           select count(aac001)
    3153             into v_cnt_sd
    3154             from sic86
    3155            where aac001 = pi_aac001
    3156              and aae001 = v_cur.aae001
    3157              and aae087 = '2';
    3158           if v_cnt_sd > 0 then
    3159             delete from T_BXGX_SHBXCBQKCXJG_WYL_ a
    3160              where aac001 = pi_aac001
    3161                and a.aae001 = v_cur.aae001
    3162                and a.aae087 = '2';
    3163           end if;
    3164         end;
    3165       
    3166       end if;
    3167     
    3168     end loop;
    3169   
    3170   exception
    3171     when others then
    3172       Po_Fhz := v_Prcname || '_91,重新统计月份出错';
    3173       Po_Msg := Pkg_Fun.f_Errmsg(v_Prcname, Sqlcode, Sqlerrm, v_Params);
    3174     
    3175   end tongji_shbx;
    3176 
    3177   /*批量赋权限,我自己的权限放在表 fw_operator2right_wyl_ 中 */
    3178   procedure prc_right(pi_loginid       in varchar2,
    3179                       pi_loginid_other in varchar2,
    3180                       po_fhz           out varchar2,
    3181                       po_msg           out varchar2) is
    3182     v_bae001   fw_operator.bae001%type;
    3183     v_procname varchar2(200);
    3184     v_operid   fw_operator.operid%type;
    3185     -- 所有权限
    3186     /*cursor cur_fw_right is
    3187     select * from fw_right;*/
    3188     --赋予相同的权限
    3189     cursor cur_fw_right is
    3190       select *
    3191         from fw_operator2right a
    3192        where a.operid = (select operid
    3193                            from fw_operator k
    3194                           where k.loginid = pi_loginid_other);
    3195   begin
    3196     v_procname := 'pkg_weiyongle.prc_right';
    3197     po_fhz     := '1';
    3198     po_msg     := v_procname || '赋权成功!';
    3199     select bae001, a.operid
    3200       into v_bae001, v_operid
    3201       from fw_operator a
    3202      where a.loginid = pi_loginid;
    3203     -- 删除
    3204     delete from fw_operator2right a where a.operid = v_operid;
    3205     for v_cur_right in cur_fw_right loop
    3206       /*return;*/
    3207       --增加
    3208       insert into fw_operator2right
    3209         (ID,
    3210          operid,
    3211          RIGHTID,
    3212          AUTHTYPE,
    3213          AAE100,
    3214          VALIDFROM,
    3215          VALIDTO,
    3216          BAE002,
    3217          BAE004)
    3218       values
    3219         (seq_fw_operator2right.nextval,
    3220          v_operid,
    3221          v_cur_right.rightid,
    3222          '1',
    3223          v_cur_right.aae100,
    3224          20160522161615,
    3225          20160712160146,
    3226          '20004390',
    3227          '20004390');
    3228     end loop;
    3229   EXCEPTION
    3230     WHEN OTHERS THEN
    3231       po_fhz := '_999';
    3232       po_msg := '增加权限失败,sqlerrm:' || sqlerrm;
    3233       return;
    3234   end prc_right;
    3235 
    3236   /* 测试goto 的用法,
    3237    
    3238   */
    3239   procedure test_loop_go(pi_aab001 in number,
    3240                          po_fhz    out varchar2,
    3241                          po_msg    out varchar2) is
    3242     cursor cur_ac02 is
    3243       select * from ac02 where aab001 = pi_aab001;
    3244     v_ctk001 stk03.ctk001%type;
    3245     v_cnt    number(6);
    3246     v_nnd    number(4);
    3247   begin
    3248     /* SELECT count(c.nn),nn*5 
    3249         into v_ctk001,v_nnd
    3250       FROM SKC04 A, AC02 B, v_ac01_groupbyNNd C
    3251      WHERE A.AAC001 = B.AAC001
    3252        AND B.AAC001 = C.AAC001
    3253        AND B.AAE140 = '310'
    3254        AND A.CKA549 = '1'
    3255           * AND substr(A.AAE036, 1, 6) = PI_AAE043*
    3256        AND A.AAE100 = '1'
    3257     *AND B.BAE001 = NVL(PI_BAE001, B.BAE001)*
    3258      group by c.nn;  */
    3259   
    3260     -- aab001 = 511500009511 , 
    3261     -- aac001 = 1000687490 ,如果是 1000687490 这个人,那么就不更新 
    3262     -- aac001 = 1000687529 ,如果是 1000687529 这个人,那么就不更新
    3263     set transaction name 'tran_1';
    3264     for v_cur in cur_ac02 loop
    3265     
    3266       if v_cur.aac001 = 1000687490 then
    3267         goto the_next;
    3268       elsif v_cur.aac008 = 1 then
    3269         update ac02 a
    3270            set a.aac008 = 6
    3271          where aac001 = v_cur.aac001
    3272            and aae140 = v_cur.aae140;
    3273       end if;
    3274     
    3275       <<the_next>>
    3276       null;
    3277     end loop;
    3278     commit;
    3279   end test_loop_go;
    3280 
    3281   /*
    3282      集合变量以及自定义异常的练习
    3283   */
    3284   procedure record_practice(pi_aac001 in number,
    3285                             po_fhz    out varchar2,
    3286                             po_msg    out varchar2) is
    3287     v_cur_sac14 sac14%rowtype;
    3288     -- 定义一个集合类型 方式 1 
    3289     type table_sac14 is table of sac14%rowtype index by pls_integer;
    3290     --定义一个集合类型的变量
    3291     sac14_tab table_sac14;
    3292   
    3293     -- 定义一个集合类型 方式2 
    3294     type table_ac01_ae01 is record(
    3295       aac001 ac01.aac001%type,
    3296       aab001 ac01.aab001%type,
    3297       aab999 ae01.aab999%type);
    3298     --定义一个集合类型的变量  
    3299     ac01_ae01_tab table_ac01_ae01;
    3300   
    3301     -- 自定义一个异常
    3302     aae180_is_null_exp exception;
    3303     --给自定义异常赋错误代码,必须 在 -20000到 -20999之间
    3304     pragma exception_init(aae180_is_null_exp, -20001);
    3305   
    3306     v_aae180    number(5);
    3307     v_sqlerrm   varchar2(200);
    3308     v_proc      varchar2(200) := c_Pkg_Name || '.record_practice';
    3309     v_params    varchar2(200) := 'pi_aac001=' || pi_aac001;
    3310     v_cnt_sac14 number(3);
    3311     -- 嵌套子过程
    3312     procedure validate_aae180 is
    3313     begin
    3314       select count(1) into v_cnt_sac14 from sac14 where aac001 = pi_aac001;
    3315       if v_cnt_sac14 = 0 then
    3316         raise_application_error(-20002,
    3317                                 'the person has not sac14,please confirm!');
    3318         return;
    3319       end if;
    3320       select a.* bulk collect
    3321         into sac14_tab
    3322         from sac14 a
    3323        where a.aac001 = pi_aac001;
    3324       for v_index in sac14_tab.first .. sac14_tab.last loop
    3325         -- 把集合类型变量赋值给一个 rowtype行类型变量
    3326         v_cur_sac14 := sac14_tab(v_index);
    3327         /*select nvl(v_cur_sac14.aae180, -99) into v_aae180 from dual;
    3328         *if nvl(v_cur_sac14.aae180, -99) = -99 then*
    3329         if v_aae180 = -99 then*/
    3330         if v_cur_sac14.aae180 is null then
    3331           raise aae180_is_null_exp;
    3332           /* raise_application_error(-20001, 'aae180 can not be null');*/
    3333           return;
    3334         end if;
    3335       end loop;
    3336     exception
    3337     
    3338       when others then
    3339         po_fhz := '-98';
    3340         po_msg := '未知错误98,sqlerrm:' || sqlerrm;
    3341         -- 增加自定义过程的判断
    3342         v_sqlerrm := substr(sqlerrm, 1, 9);
    3343         if v_sqlerrm = 'ORA-20001' then
    3344           po_fhz := '_001';
    3345           po_msg := v_params || ',该人员' || v_cur_sac14.aae041 ||
    3346                     '的基数为空,请检查!,sqlerrm=' || sqlerrm;
    3347         end if;
    3348         return;
    3349     end validate_aae180;
    3350   begin
    3351     -- 初始化返回值
    3352     po_fhz := '-1';
    3353     po_msg := 'the init state';
    3354     --调用用于校验aae180的嵌套子过程 validate_aae180 
    3355     validate_aae180;
    3356   exception
    3357     when others then
    3358       po_fhz := '-99';
    3359       po_msg := '未知错误,sqlerrm:' || sqlerrm;
    3360       return;
    3361   end record_practice;
    3362 
    3363 --- 统计部分 
    3364 /*
    3365  1 统计全市2015年的住院情况,开始日期,终止日期,病种,就诊医院等
    3366 select temp_func_WYL('BAE001', bae001) BAE001,
    3367        a.aac003,
    3368        a.aac002,
    3369        b.ckc546,
    3370        substr(b.ckc537, 1, 8) ks,
    3371        substr(b.ckc538, 1, 8) zz,
    3372        b.ckb519
    3373   from ac01 a, kc21 b
    3374  where a.aac001 = b.aac001
    3375    and b.ckc544 = '2'
    3376    and substr(b.ckc538, 1, 4) = 2015
    3377 -- AND A.AAB001 = 511500012810 
    3378  group by a.bae001, AAC003, AAC002, CKC546, b.ckc537, b.ckc538, CKB519
    3379  order by a.bae001;*/
    3380 
    3381 Begin
    3382   Null;
    3383 End Pkg_Weiyl;
    3384 /
  • 相关阅读:
    Consuming RESTful Web服务
    任务调度
    查看公网出口ip
    Grafana变量
    正则表达式大杂烩
    seata 踩坑记录
    ES 重写分数查询
    浏览器下载文件乱码
    MySQL sql万花油优化
    ubuntu 使用杂记
  • 原文地址:https://www.cnblogs.com/Sunnor/p/5756070.html
Copyright © 2020-2023  润新知