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 := '';
  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 = ''
  287. Where Aae140 = ''
  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 := '';
  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 := '';
  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 <> '' 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 = '') 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,变更类型为 修改资料
  415. '', -- 1933,变更原因, 其它
  416. '',
  417. /*seq_ac25_bae007.nextval,*/ -- 业务流水号
  418. Pi_Bae007,
  419. Pi_Aae011,
  420. To_Char(Sysdate, 'yyyymmddhh24miss'),
  421. '',
  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 = '' where bae007 = Pi_Bae007;
  454. Begin
  455. Update Ac01 Set Aac002 = v_Aac002y Where Aac002 = v_Aac002;
  456. Po_Fhz := '';
  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 = ''
  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 := '';
  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 := '';
  537. -- 对修改后的身份证进行校验,防止不是纯数字,长度已经在前台进行了校验
  538. Vali_Idcard_Lenandchar(Pi_Aac002_New, Po_Fhz, Po_Msg);
  539. If Po_Fhz <> '' 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 ('',
  581. '',
  582. '',
  583. '',
  584. '',
  585. '',
  586. '',
  587. '')
  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 ('',
  605. '',
  606. '',
  607. '',
  608. '',
  609. '',
  610. '',
  611. '')
  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 = '';
  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 := '';
  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 := '';
  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. '',
  807. '', -- 50,变更类型为 修改资料
  808. '', -- 1933,变更原因, 其它
  809. '',
  810. '', -- 业务流水号
  811. Pi_Aae011,
  812. To_Char(Sysdate, 'yyyymmddhh24miss'),
  813. '',
  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 <> '' then
  900. v_where := v_where || ' and aab999=''' || pi_aab999 || '''';
  901. elsif Pi_Aab999 = '' then
  902. v_where := ' null or 1=1 ';
  903. end if;
  904. if Pi_Aae001 <> '' 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 <> '' 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 <> '' 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 := '';
  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 = '',
  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 := '';
  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 := '';
  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 = '' 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 := '';
  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 = ''
  1094. Where Aae140 = Pi_Aae140
  1095. And Aac008 = '';
  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 = '' Then
  1113. Select Count(*) Into v_Count From Card_Info Where Name = Pi_Aac003;
  1114. If v_Count > 0 Then
  1115. Po_Fhz := '';
  1116. Po_Msg := '成功';
  1117. End If;
  1118. End If;
  1119. If Pi_Aac003 = '' Then
  1120. Select Count(*) Into v_Count From Card_Info Where Idcard = Pi_Aac002;
  1121. If v_Count > 0 Then
  1122. Po_Fhz := '';
  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 := '';
  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 = ''
  1160. And Aac001 = v_Aac001
  1161. And Aac008 = '';
  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 = ''
  1172. And Aac008 = '';
  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 := '';
  1187. Select Count(1)
  1188. Into v_Count1
  1189. From Skc84
  1190. Where Aac001 = Pi_Aac001
  1191. And Aae140 = '';
  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 := '';
  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 := '';
  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 := '';
  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 := '';
  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 := '';
  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 := '';
  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 := '';
  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 := '';
  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 := '';
  1485. po_msg := '成功';
  1486. null;
  1487. /*如果是'1',那么说明是修改*/
  1488. if pi_bz = '' 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 = '' 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 != '' 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. '',
  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 := '';
  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 = ''
  1696. where SERIALNUM = PI_SERIALNUM
  1697. and bce326 <> '';
  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 := '';
  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 <> '' 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 := '';
  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 = ''
  1813. and a.aae026 = ''
  1814. and cae011 = ''
  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 = ''
  1824. and a.aae026 = ''
  1825. and cae011 = ''
  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 = ''
  1835. and a.aae026 is null
  1836. and cae011 <> ''
  1837. and cae011 <> ''
  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 = ''
  1847. and a.aae026 is null
  1848. and cae011 <> ''
  1849. and cae011 <> ''
  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 = ''
  1859. and a.aae026 = ''
  1860. and cae011 = ''
  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 = ''
  1870. and a.aae026 = ''
  1871. and cae011 = ''
  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 = ''
  1881. and a.aae026 is null
  1882. and cae011 <> ''
  1883. and cae011 <> ''
  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 = ''
  1893. and a.aae026 is null
  1894. and cae011 <> ''
  1895. and cae011 <> ''
  1896. group by a.bae010;
  1897.  
  1898. begin
  1899. po_fhz := '';
  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 := '';
  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 := '';
  2159. for v_cur in cur_dwxx loop
  2160. Pkg_Ryhb_Pl_New.Plhb_Start(pi_bae001,
  2161. v_cur.aab001,
  2162. '',
  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 := '';
  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 = ''
  2212. and zfbtfs <> null;
  2213. begin
  2214. -- 初始化参数
  2215. po_fhz := '';
  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 = ''
  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 = ''
  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 = ''
  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 = ''
  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 = ''
  2286. and zfbtfs is not null
  2287. group by aae001;
  2288. begin
  2289. -- 初始化参数
  2290. po_fhz := '';
  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 := '';
  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 := '';
  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), '')
  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 := '';
  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 := '';
  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 := '';
  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 := '';
  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 := '';
  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 = '';
  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 = ''
  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 = ''
  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 = ''
  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 = ''
  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 ('', '')
  2840. group by aae001
  2841. order by aae001;
  2842. begin
  2843. -- 初始化返回值
  2844. Po_Fhz := '';
  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 = '';
  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 = ''
  3014. and substr(aae041, 1, 4) = v_cur.aae001
  3015. /*and aac402 = '0';*/
  3016. and aac402 in ('', '');
  3017. select min(aae041)
  3018. into v_aae041_ac20
  3019. from ac20
  3020. where aac001 = pi_aac001
  3021. and aae140 = ''
  3022. and substr(aae041, 1, 4) = v_cur.aae001
  3023. /*and aac402 = '0';*/
  3024. and aac402 in ('', '');
  3025. select max(aae042)
  3026. into v_aae042_sac14
  3027. from sac14
  3028. where aac001 = pi_aac001
  3029. and aae140 = ''
  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 = ''
  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 = ''
  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 = '';
  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 = '';
  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 = '';
  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 = '';
  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 := '';
  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. '',
  3223. v_cur_right.aae100,
  3224. 20160522161615,
  3225. 20160712160146,
  3226. '',
  3227. '');
  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. /

oracle 集合变量以及自定义异常的用法的更多相关文章

  1. 分享:Oracle 系统变量函数用法说明

    在Oracle数据库中,Oracle系统变量函数是经常会使用到的函数,分享下Oracle系统变量函数的用法. Oracle函数多种多样,系统变量函数就是其中之一,介绍三种最常见的系统变量函数. Ora ...

  2. Oracle数据库中序列(SEQUENCE)的用法详解

    Oracle数据库中序列(SEQUENCE)的用法详解   在Oracle数据库中,序列的用途是生成表的主键值,可以在插入语句中引用,也可以通过查询检查当前值,或使序列增至下一个值.本文我们主要介绍了 ...

  3. $ cd `dirname $0` 和PWD%/* shell变量的一些特殊用法

    在命令行状态下单纯执行 $ cd `dirname $0` 是毫无意义的.因为他返回当前路径的".". $0:当前Shell程序的文件名dirname $0,获取当前Shell程序 ...

  4. Oracle集合类型

    Oracle集合类型介绍   集合类型   1. 使用条件:    a. 单行单列的数据,使用标量变量 .     b. 单行多列数据,使用记录    c. 单列多行数据,使用集合        *集 ...

  5. 转载~kxcfzyk:Linux C语言多线程库Pthread中条件变量的的正确用法逐步详解

    Linux C语言多线程库Pthread中条件变量的的正确用法逐步详解   多线程c语言linuxsemaphore条件变量 (本文的读者定位是了解Pthread常用多线程API和Pthread互斥锁 ...

  6. Oracle start with connect by prior 用法

    Oracle start with connect by prior 用法    语法: select * from 表名 where 条件1 start with 条件2 connect by pr ...

  7. Oracle集合操作函数:union、intersect、minus

    [转]Oracle集合操作函数:union.intersect.minus 集合操作符专门用于合并多条select 语句的结果,包括:UNION, UNION ALL, INTERSECT, MINU ...

  8. Java集合中迭代器的常用用法

    该例子展示了一个Java集合中迭代器的常用用法public class LinkedListTest { public static void main(String[] args) { List&l ...

  9. List<T>集合的Sort自定义排序用法简单解析

    List<T>集合的Sort自定义排序用法简单解析: 如下:一系列无序数字,如果想要他们倒序排列,则使用如下代码: 那么如何理解这段代码呢? (x,y)表示相邻的两个对象,如果满足条件:x ...

随机推荐

  1. 用rsync从Linux到Windows远程备份

    论 rsync是Linux系统下的数据镜像备份工具,从软件的命名上就可以看出来 了——remote sync.rsync支持大多数的类Unix系统,无论是Linux.Solaris还是BSD上都经过了 ...

  2. 走进Groovy (二)

    承接上一篇,配置好环境后,开始正式学习语法.我假设看此文的同学至少会一定的JAVA语法,因此一些太过基础的就不记录了,基本上,大家看看示例就明白了. Groovy的卖点之一,就是全兼容JAVA的语法, ...

  3. Changing the Auto-Logout Timeout in SSH

    SSH: We can set a timeout interval for ssh client who are idle or in inactive state. As soon as the ...

  4. [VC6 console]调用API获取手机归属地

    为了完成作业,就偷个懒糊了个获取手机归属地的程序,.我原本写的是MFC版本的,但是由于MFC的代码不是很通用,加上我没有学MFC的时候看别人MFC代码只能干瞪眼,看不懂,所以便改成控制台版本的了.但这 ...

  5. C# DateTime.Now 用法小记

    1.DateTime.Now   获取时间跟系统当前时间一直并且格式一直,如系统时间带有星期几,获取的时间也会带有 2,以下为拷贝前人总结的: //2008年4月24日 System.DateTime ...

  6. zoj 3706 Break Standard Weight

    /*题意:将两个砝码中的其中一个分成两块,三块组合最多有几种情况(可以只有一块,或者两块). 组合情况 i j m 三块砝码 (i+j)-m=m-(i+j) i+j i-j=j-i  i j m (i ...

  7. handlebar.js使用

    官方网站:http://handlebarsjs.com/ 下载及查看使用帮助,或者用百度cdn引用 一.定义模板 <script id="entry-template" t ...

  8. ArrayList-VS-LinkedList

    ArrayList 是List接口的实现类:底层的数据结构是数组,而LinkedList底层数据结构是双向循环链表. 所以在查询时ArrayList效率高,增删时LinkedList高.由于List中 ...

  9. 获取执行计划——EXPLAN PLAN

    一般获取执行计划有四种途径:1.执行explain plan,查询结果输出表.2.查询动态性能视图,它显示缓存在库缓存中的执行计划(有时查不出结果是因为执行计划已经不在库缓存中).3.查询AWR或St ...

  10. YII框架下实现密码修改

    YII2 实现修改密码功能 主要难点: 1.密码加密 YII2对密码加密生成的结果是不同的,即用相同的初始密码在不同时间得到的加密结果不同,所以我们不能用常用的方法去验证密码是否正确(将密码加密后与数 ...