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 3311 -- 嵌套子过程 3312 procedure validate_aae180 is 3313 begin 3314 select a.* bulk collect 3315 into sac14_tab 3316 from sac14 a 3317 where a.aac001 = pi_aac001; 3318 for v_index in sac14_tab.first .. sac14_tab.last loop 3319 -- 把集合类型变量赋值给一个 rowtype行类型变量 3320 v_cur_sac14 := sac14_tab(v_index); 3321 /*select nvl(v_cur_sac14.aae180, -99) into v_aae180 from dual; 3322 \*if nvl(v_cur_sac14.aae180, -99) = -99 then*3323 if v_aae180 = -99 then*/ 3324 if v_cur_sac14.aae180 is null then 3325 raise aae180_is_null_exp; 3326 /* raise_application_error(-20001, ‘aae180 can not be null‘);*/ 3327 return; 3328 end if; 3329 end loop; 3330 end validate_aae180; 3331 begin 3332 -- 初始化返回值 3333 po_fhz := ‘-1‘; 3334 po_msg := ‘the init state‘; 3335 --调用用于校验aae180的嵌套子过程 validate_aae180 3336 validate_aae180; 3337 exception 3338 when others then 3339 po_fhz := ‘-99‘; 3340 po_msg := ‘未知错误,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 record_practice; 3350 3351 --- 统计部分 3352 /* 3353 1 统计全市2015年的住院情况,开始日期,终止日期,病种,就诊医院等 3354 select temp_func_WYL(‘BAE001‘, bae001) BAE001, 3355 a.aac003, 3356 a.aac002, 3357 b.ckc546, 3358 substr(b.ckc537, 1, 8) ks, 3359 substr(b.ckc538, 1, 8) zz, 3360 b.ckb519 3361 from ac01 a, kc21 b 3362 where a.aac001 = b.aac001 3363 and b.ckc544 = ‘2‘ 3364 and substr(b.ckc538, 1, 4) = 2015 3365 -- AND A.AAB001 = 511500012810 3366 group by a.bae001, AAC003, AAC002, CKC546, b.ckc537, b.ckc538, CKB519 3367 order by a.bae001;*/ 3368 3369 Begin 3370 Null; 3371 End Pkg_Weiyl; 3372 /
时间: 2024-10-06 13:06:57