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 /