oracle 集合变量以及自定义异常的用法
oracle 集合变量以及自定义异常的用法,
在过程 record_practice 有record变量和自定义异常的用法实例。具体在3284行。
- CREATE OR REPLACE Package Pkg_Weiyl Is
- Pkg_Name Constant Varchar2(20) := 'pkg_weiyl';
- Too_Young Constant Number := -20001;
- Exc_Too_Young Exception;
- Pragma Exception_Init(Exc_Too_Young, -20001);
- Procedure Updateaae140(Pi_Aac002 In Varchar2,
- Pi_Aae140 In Varchar2,
- Po_Fhz Out Varchar2,
- Po_Msg Out Varchar2);
- Procedure Updateidcard(Pi_Bae007 In Varchar2,
- Pi_Flag In Varchar2,
- Pi_Aac002 In Varchar2,
- Pi_Aac002_New In Varchar2,
- Pi_Aae013 In Varchar2,
- Pi_Aae011 In Varchar2,
- Pi_Bae001 In Varchar2,
- Po_Fhz Out Varchar2,
- Po_Msg Out Varchar2);
- Procedure Cancelupdate(Pi_Bae007 In Varchar2,
- Po_Fhz Out Varchar2,
- Po_Msg Out Varchar2);
- Procedure Updateidfh(Pi_Bae007 In Varchar2,
- Pi_Aae012 In Varchar2,
- Po_Fhz Out Varchar2,
- Po_Msg Out Varchar2);
- Procedure Validateidcard(Pi_Aac001 In Number,
- Pi_Aac002_New In Varchar2,
- Po_Fhz Out Varchar2,
- Po_Msg Out Varchar2);
- Procedure Vali_Idcard_Lenandchar(Pi_Aac002 In Varchar2,
- Po_Fhz Out Varchar2,
- Po_Msg Out Varchar2);
- Procedure Updateidcard_Fortest(Pi_Aac002 In Varchar2,
- Pi_Aac002_New In Varchar2,
- Pi_Aae013 In Varchar2,
- Pi_Aae011 In Varchar2,
- Pi_Bae001 In Varchar2,
- Po_Fhz Out Varchar2,
- Po_Msg Out Varchar2);
- --截取字符串 split_type 是自己建的类型 CREATE or replace type split_comma is table of varchar2(4000);
- -- 取出字符串的方法 : select column_value from table (pkg_weiyl.split_dh('dd,aa,134'));
- Function Split_Dh(p_Str In Varchar2,
- p_Delimiter In Varchar2 Default (',') --分隔符,默认逗号
- ) Return Split_Type;
- Function Func_Wyl(Pi_Aaa100 Varchar2, Pi_Aaa102 Varchar2)
- --字典转换,把代码值转换成对应的可理解的中文,卫永乐,20141105
- Return Varchar2;
- Function Func_Check_Para(Pi_Aab999 In Varchar2,
- Pi_Pch In Varchar2,
- Pi_Aae001 In Number,
- Pi_Aae036 In Varchar2,
- Pi_Aac027 In Number)
- /*拼接where条件 过程 check_sdnmdc 的游标的where条件*/
- Return Varchar2;
- /*
- added 20160801
- 获取月份差值,主要针对于转移统计的
- */
- function getMonthNum(pi_ksyf in number,
- pi_zzyf in number,
- pi_aae180 in number) return number;
- Procedure Xjyyzf(Pi_Bae007 In Varchar2,
- Pi_Operid In Varchar2,
- Pi_Aae037 In Varchar2,
- Pi_Aae038 In Varchar2,
- Po_Fhz Out Varchar2,
- Po_Msg Out Varchar2);
- --- 循环调用的过程,解决每次都要自己写一个declare plsql代码块,
- --入参:
- Procedure Prc_Xunhuan(Pi_Prcname In Varchar2, --要调用的过程名
- Pi_Tabname In Varchar2, --cursor取值的表
- Po_Fhz Out Varchar2,
- Po_Msg Out Varchar2);
- Procedure Xjyyzf_Callback(Pi_Bae007 In Varchar2,
- Pi_Operid In Varchar2,
- Po_Fhz Out Varchar2,
- Po_Msg Out Varchar2);
- Procedure Xjyyzfqx(Pi_Bae007 In Varchar2,
- Po_Fhz Out Varchar2,
- Po_Msg Out Varchar2);
- -- 添加自治事务
- Procedure Autonomous_Tran(Pi_Aac001 In Varchar2,
- Po_Fhz Out Varchar2,
- Po_Msg Out Varchar2);
- /*手工添加表级锁,使用场景,如果要操作一张大表的大部分数据,
- 如果不加表级锁,那么就会耗费大量的资源,这种情况下可以使用
- 手工给表加锁,释放方式 rollback,或者commit
- */
- Procedure Update_Ac02_Aae140(Pi_Aae140 In Varchar2,
- Pi_Fhz Out Varchar2,
- Po_Msg Out Varchar2);
- Procedure Querycheck(Pi_Aac002 In Varchar2,
- Pi_Aac003 In Varchar2,
- Po_Fhz Out Varchar2,
- Po_Msg Out Varchar2);
- Procedure Check_Ac02(Pi_Aac002 In Varchar2,
- Po_Aac001 Out Number,
- Po_Cac012 Out Varchar2,
- Po_Aab001 Out Varchar2,
- Po_Fhz Out Varchar2,
- Po_Msg Out Varchar2);
- Procedure Check_Skc84(Pi_Aac001 In Varchar2,
- Po_Fhz Out Varchar2,
- Po_Msg Out Varchar2);
- Procedure Check_Sdnmdcc(Pi_Aab999 In Varchar2,
- PI_PCH in varchar2,
- Po_Fhz Out Varchar2,
- Po_Msg Out Varchar2);
- Procedure Check_Sdnmdc(Pi_Bae001 In Varchar2,
- Pi_Aab999 In Varchar2,
- Pi_Pch In Varchar2,
- /* PI_GLT in varchar2,*/
- Pi_Aae001 In Varchar2,
- Pi_Aae036 In Varchar2,
- Pi_Aac027 In Varchar2,
- Pi_Bzw In Varchar2,
- Pi_Oper In Varchar2,
- Po_Fhz Out Varchar2,
- Po_Msg Out Varchar2);
- Procedure Check_Sdnmdc_Multi(Pi_Bae001 In Varchar2,
- Pi_Aab999 In Varchar2,
- Pi_Pch In Varchar2,
- /* PI_GLT in varchar2,*/
- Pi_Aae001 In Varchar2,
- Pi_Aae036 In Varchar2,
- Pi_Aac027 In Varchar2,
- Pi_Bzw In Varchar2,
- Pi_Oper In Varchar2,
- Po_Fhz Out Varchar2,
- Po_Msg Out Varchar2);
- Procedure Updatekbb5(Pi_Bae007 In Varchar2,
- Pi_Ckz545 In Varchar2,
- Pi_Ckb626 In Varchar2,
- Pi_Ckb627 In Varchar2,
- Pi_Ckb629 In Varchar2,
- Pi_Ckb630 In Varchar2,
- Po_Fhz Out Varchar2,
- Po_Msg Out Varchar2);
- Procedure Getaaz601(Pi_Rc In Varchar2,
- po_aaz601 out number,
- Po_Fhz Out Varchar2,
- Po_Msg Out Varchar2);
- Procedure Insertfw_Zsk(PI_AAA200 in varchar2,
- Pi_Aae202 In Varchar2,
- Pi_Aaa203 In Varchar2,
- Pi_Aae008 In Varchar2,
- PI_AAE011 IN VARCHAR2,
- PI_AAE906 IN VARCHAR2,
- PI_BZ IN VARCHAR2,
- Po_Fhz Out Varchar2,
- Po_Msg Out Varchar2);
- /*拼接两个字符串,练手嵌套存储过程*/
- procedure testNestedPro(pi_xing in varchar2,
- pi_ming in varchar2,
- pi_aab001 in number,
- po_fhz out varchar2,
- po_msg out varchar2);
- /*触摸屏查询标记*/
- procedure cancelCmp(PI_SERIALNUM in varchar2,
- po_fhz out varchar2,
- po_msg out varchar2);
- /*取消征集通知单*/
- procedure cancelAaz288(PI_OPERID in varchar2,
- PI_AAZ288 in varchar2,
- po_fhz out varchar2,
- po_msg out varchar2);
- /*删除知识库核销的附件内容,否则数据里的不必要的附件会越来越多*/
- procedure deleteZskFile(PI_CAE232 in varchar2,
- po_fhz out varchar2,
- po_msg out varchar2);
- procedure generatexmmx(pi_ksrq in varchar2,
- pi_zzrq in varchar2,
- po_fhz out varchar2,
- po_msg out varchar2);
- procedure rebuild_sic86(pi_aac001 in varchar2,
- po_fhz out varchar2,
- po_msg out varchar2);
- procedure rebuild_ab07(pi_aab001 in varchar2,
- pi_ksny in varchar2,
- pi_zzny in varchar2,
- pi_aae140 in varchar2,
- po_fhz out varchar2,
- po_msg out varchar2);
- /*Pkg_Ryhb_Pl_New
- --批量合并,初始数据生成
- Procedure Plhb_Start(Pi_Bae001 In Varchar2,
- Pi_Aab001 In Number,
- Pi_Jbr In Varchar2,
- Po_Fhz Out Varchar2,
- Po_Msg Out Varchar2)
- */
- procedure generate_plhb_data(pi_bae001 in varchar2,
- po_fhz out varchar2,
- po_msg out varchar2);
- procedure queryZSK(PI_AAE906 in varchar2,
- PO_AAE202 out varchar2,
- PO_AAE008 out varchar2,
- po_fhz out varchar2,
- po_msg out varchar2);
- /*
- 生成失地农民汇总数据
- by weiyongel 20160519
- */
- procedure generate_sdnmhzsj(PI_BAE001 in varchar2,
- po_fhz out varchar2,
- po_msg out varchar2);
- /*
- 生成失地农民清理数据
- by weiyongel 20160519
- */
- procedure generate_sdnmqlsj(PI_BAE001 in varchar2,
- po_fhz out varchar2,
- po_msg out varchar2);
- /*生成失地农民数据清理后的变化字段,用于查询失地农民数据清理模块*/
- procedure generate_sdnmdatachange(PI_AAC001 in varchar2,
- PI_AAZ288 in varchar2,
- PO_FHZ out varchar2,
- PO_MSG out varchar2);
- /*检查ac35时间 ,增减员时用*/
- procedure checkAC35Tim(PI_AAC002 in varchar2,
- pi_aab999 in varchar2,
- Po_AAE042 OUT varchar2,
- PO_FHZ out varchar2,
- PO_MSG out varchar2);
- /* 重新统计ac43 aae002 ,20160526 */
- procedure cxtj_ac43(PI_AAB001 in varchar2,
- PO_FHZ out varchar2,
- PO_MSG out varchar2);
- procedure getAAC027(PI_AAC002 in varchar2,
- PO_AAC027 OUT varchar2,
- PO_FHZ out varchar2,
- PO_MSG out varchar2);
- /* for test ,20160530 */
- procedure myInsert(PI_AAC002 in varchar2,
- PO_FHZ out varchar2,
- PO_MSG out varchar2);
- /*统计 社会保险参保情况查询 */
- procedure tongji_shbx_old(PI_AAC001 in varchar2,
- PO_FHZ out varchar2,
- PO_MSG out varchar2);
- /*统计 社会保险参保情况查询 2016081 */
- procedure tongji_shbx(PI_AAC001 in varchar2,
- PO_FHZ out varchar2,
- PO_MSG out varchar2);
- /*批量赋权限,我自己的权限放在表 fw_operator2right_wyl_ 中 */
- procedure prc_right(pi_loginid in varchar2,
- pi_loginid_other in varchar2,
- po_fhz out varchar2,
- po_msg out varchar2);
- /* 测试goto 的用法 */
- procedure test_loop_go(pi_aab001 in number,
- po_fhz out varchar2,
- po_msg out varchar2);
- /*
- 集合变量
- */
- procedure record_practice(pi_aac001 in number,
- po_fhz out varchar2,
- po_msg out varchar2);
- End Pkg_Weiyl;
- /
- CREATE OR REPLACE Package Body Pkg_Weiyl Is
- c_Pkg_Name Constant Varchar2(20) := 'PKG_WEIYL';
- --修改险种
- Procedure Updateaae140(Pi_Aac002 In Varchar2,
- Pi_Aae140 In Varchar2,
- Po_Fhz Out Varchar2,
- Po_Msg Out Varchar2) Is
- v_Count Number(2);
- Begin
- Po_Fhz := '';
- Po_Msg := '成功';
- Select Count(*) Into v_Count From Sab11 Where Bcc347 = Pi_Aac002;
- If v_Count > 0 Then
- Update Ac02
- Set Aac008 = ''
- Where Aae140 = ''
- And Aac001 = (Select Aac001
- From Ac01
- Where Aac002 = Pi_Aac002
- And Aae140 = Pi_Aae140);
- End If;
- Exception
- When No_Data_Found Then
- Po_Fhz := '';
- Po_Msg := '失败';
- End Updateaae140;
- --修改身份证号
- Procedure Updateidcard(Pi_Bae007 In Varchar2,
- Pi_Flag In Varchar2,
- Pi_Aac002 In Varchar2,
- Pi_Aac002_New In Varchar2,
- Pi_Aae013 In Varchar2,
- Pi_Aae011 In Varchar2,
- Pi_Bae001 In Varchar2,
- Po_Fhz Out Varchar2,
- Po_Msg Out Varchar2) Is
- v_Aac001 Ac02.Aac001%Type;
- v_Prc Varchar2(20);
- v_Aab001 Ac02.Aab001%Type;
- v_Yl_Count Number(2); --养老待遇记录数
- v_Msg Varchar2(200);
- v_Aaa076 Ac60.Aaa076%Type;
- v_Prcname Varchar2(200);
- v_Params Varchar2(500);
- v_Sqlerrm Varchar2(500);
- v_Aac003 Ac01.Aac003%Type;
- v_Aac002_Tmp Ac01.Aac002%Type;
- Begin
- -- 初始化返回值
- Po_Fhz := '';
- Po_Msg := '';
- v_Prc := '.updateIDCard';
- v_Prcname := c_Pkg_Name || v_Prc;
- v_Params := ',传入参数为:pi_aac002=' || Pi_Aac002 || ',pi_aac002_new=' ||
- Pi_Aac002_New || ',pi_aae013=' || Pi_Aae013 ||
- ',pi_aae011=' || Pi_Aae011 || ',pi_bae001=' || Pi_Bae001;
- Select Aac001, Aab001
- Into v_Aac001, v_Aab001
- From Ac01
- Where Aac002 = Pi_Aac002;
- -- 调用校验过程进行判断
- Validateidcard(v_Aac001, Pi_Aac002_New, Po_Fhz, Po_Msg);
- If Po_Fhz <> '' Then
- Return;
- End If;
- -- 先做 是否有养老待遇的判断,如果有就直接返回,不更新ac01.aac002
- Select Count(1) Into v_Yl_Count From Ac60 Where Aac001 = v_Aac001;
- If v_Yl_Count > 0 Then
- -- 如果有养老待遇,那么抛出更详细的结果,以便于前台更容易理解
- -- 只取第一条
- Select Aaa076
- Into v_Aaa076
- From Ac60
- Where Aac001 = v_Aac001
- And Rownum = 1;
- Select Func_Wyl('AAA076', v_Aaa076) Into v_Msg From Dual;
- Po_Fhz := '-2';
- Po_Msg := v_Prcname || '执行失败,该人员存在养老待遇类型为 "' || v_Msg ||
- '" 的养老待遇,且待遇状态正常,因此不能更新身份证';
- Return;
- End If;
- -- 更新ac01.AAC002
- Begin
- -- 根据传入的标志来判断是该笔业务是改成正确身份证还是改成错误身份证,
- If (Pi_Flag = '') Then
- /*v_aac002_tmp := BXGX_SEQ_aac002_tmp.Nextval||substr(pi_aac002,7,length(pi_aac002)-6);*/
- v_Aac002_Tmp := Pi_Aac002_New;
- Else
- v_Aac002_Tmp := Pi_Aac002_New;
- End If;
- Update Ac01 Set Aac002 = v_Aac002_Tmp Where Aac001 = v_Aac001;
- Exception
- When Others Then
- v_Sqlerrm := Substr(Sqlerrm, 1, 9);
- /* 捕获,唯一性约束冲突*/
- If v_Sqlerrm = 'ORA-00001' Then
- Select Aac003
- Into v_Aac003
- From Ac01
- Where Aac002 = Pi_Aac002_New;
- Po_Fhz := v_Prcname || '_-3';
- Po_Msg := '系统里已经存在身份证为' || Pi_Aac002_New || '的参保人了,姓名:' ||
- v_Aac003 || ',因此不能修改';
- Elsif v_Sqlerrm <> 'ORA-00001' Then
- /*SQLERRM=ORA-00001*/
- /*没法成功捕捉到sqlerrm*/
- Po_Msg := Pkg_Fun.f_Errmsg(v_Prcname, Sqlcode, Sqlerrm, v_Params);
- Po_Fhz := v_Prcname || '_94';
- End If;
- --po_msg := pkg_fun.F_ERRMSG(v_prcName,sqlcode,sqlerrm,v_params);
- --po_fhz := v_prcName||'_91';
- Return;
- End;
- Insert Into Ac25
- (Aaz163,
- Bae001,
- Aab001,
- Aac001,
- Cae129,
- Aac050,
- Aae160,
- Cac038,
- Bae007,
- Aae011,
- Aae036,
- Bce326,
- Aae012,
- Bhe949,
- Cae030,
- Cae031,
- Aae013,
- Aac002,
- Aac002_New)
- Values
- (Seq_Bxgx_Aaz163.Nextval, --使用原来的序列号
- Pi_Bae001,
- v_Aab001,
- v_Aac001,
- To_Char(Sysdate, 'yyyymm'),
- '', -- 50,变更类型为 修改资料
- '', -- 1933,变更原因, 其它
- '',
- /*seq_ac25_bae007.nextval,*/ -- 业务流水号
- Pi_Bae007,
- Pi_Aae011,
- To_Char(Sysdate, 'yyyymmddhh24miss'),
- '',
- '',
- To_Char(Sysdate, 'yyyymmddhh24miss'),
- '',
- '',
- Pi_Aae013,
- Pi_Aac002,
- v_Aac002_Tmp);
- Update Ac01 Set Aac002 = Pi_Aac002 Where Aac002 = v_Aac002_Tmp;
- Exception
- When No_Data_Found Then
- -- Sqlcode, Sqlerrm
- Po_Fhz := '-1';
- Po_Msg := '过程' || Pkg_Name || v_Prc || '报错,ac01表里没有找到该人员';
- End Updateidcard;
- Procedure Cancelupdate(Pi_Bae007 In Varchar2,
- Po_Fhz Out Varchar2,
- Po_Msg Out Varchar2) Is
- v_Aac002 Ac01.Aac002%Type;
- v_Aac002y Ac25.Aac002%Type;
- Begin
- -- 初始化返回值
- Po_Fhz := '-1';
- Po_Msg := '退单失败';
- Select a.Aac002_New
- Into v_Aac002
- From Ac25 a
- Where a.Bae007 = Pi_Bae007;
- Select a.Aac002 Into v_Aac002y From Ac25 a Where a.Bae007 = Pi_Bae007;
- -- 更新复核标志
- update ac25 set bce326 = '' where bae007 = Pi_Bae007;
- Begin
- Update Ac01 Set Aac002 = v_Aac002y Where Aac002 = v_Aac002;
- Po_Fhz := '';
- Po_Msg := '成功';
- Exception
- When Others Then
- Po_Fhz := '-2';
- Po_Msg := '退单失败2';
- End;
- End;
- Procedure Updateidfh(Pi_Bae007 In Varchar2,
- Pi_Aae012 In Varchar2,
- Po_Fhz Out Varchar2,
- Po_Msg Out Varchar2) Is
- v_aac002 ac01.aac002%type;
- v_cnt number(2);
- Begin
- -- 初始化返回值
- Po_Fhz := '-1';
- Po_Msg := '添加复核人';
- Begin
- Update Ac25
- Set Aae012 = Pi_Aae012, Bce326 = ''
- Where Bae007 = Pi_Bae007;
- select count(1)
- into v_cnt
- from ac01
- where aac002 in
- (Select Aac002_New From Ac25 Where Bae007 = Pi_Bae007);
- if v_cnt > 0 then
- Select Aac002_New into v_aac002 From Ac25 Where Bae007 = Pi_Bae007;
- Po_Fhz := '-2';
- Po_Msg := '修改后的新身份证号' || v_aac002 ||
- ',在新系统已经存在,请回退重新办理!pkg_weiyl.Updateidfh ,Pi_Bae007:' ||
- Pi_Bae007 || ',Pi_Aae012:' || Pi_Aae012;
- return;
- else
- Update Ac01
- Set Aac002 =
- (Select b.Aac002_New From Ac25 b Where Bae007 = Pi_Bae007)
- Where Aac002 = (Select Aac002 From Ac25 Where Bae007 = Pi_Bae007);
- end if;
- Po_Fhz := '';
- Po_Msg := '添加复核人成功';
- End;
- Exception
- When Others Then
- Po_Fhz := '-1';
- Po_Msg := '添加复核人失败,pkg_weiyl.Updateidfh ,Pi_Bae007:' || Pi_Bae007 ||
- ',Pi_Aae012:' || Pi_Aae012;
- End Updateidfh;
- --身份证校验,把医保局,信息中心提出的身份证修改的条件 分出来,单独校验
- --身份证校验,把医保局,信息中心提出的身份证修改的条件 分出来,单独校验
- Procedure Validateidcard(Pi_Aac001 In Number,
- Pi_Aac002_New In Varchar2,
- Po_Fhz Out Varchar2,
- Po_Msg Out Varchar2) Is
- v_Prcname Varchar2(200) := c_Pkg_Name || '.validateIDCARD';
- v_Params Varchar2(500) := 'pi_aac001=' || Pi_Aac001;
- v_Aae240 Skc81.Aae240%Type;
- v_Lc31_Count Number(2);
- v_Count_Skc81 Number(2);
- v_Aac002_Tmp Ac25.Aac002_New%Type;
- v_Count_Cardinfo Number(2);
- v_Count_Ac60 Number(2);
- v_Count_Kc21 Number(2);
- /*function validate_aac002 return varchar2 is
- v_aac002_new ac25.aac002_new%type;
- v_aac002_after number(20);
- begin
- select a.aac002_new into v_aac002_new from ac25 a where a.aac001 = pi_aac001;
- v_aac002_after := to_number(v_aac002_new);
- return '1';
- exception
- when others then
- return '-1';
- end;*/
- Begin
- -- 初始化
- Po_Fhz := '';
- -- 对修改后的身份证进行校验,防止不是纯数字,长度已经在前台进行了校验
- Vali_Idcard_Lenandchar(Pi_Aac002_New, Po_Fhz, Po_Msg);
- If Po_Fhz <> '' Then
- Return;
- End If;
- -- 1 医保局提出的要求,如果skc81.aae240>0 ,余额大于0 就不让改身份证。
- Begin
- -- 先要判断是否 skc81 是否有数据,有的话在判断 skc81.aae240是否大于0 ,如果skc81 没有数据的话 就不查 余额
- Select Count(*)
- Into v_Count_Skc81
- From Skc81 a
- Where a.Aac001 = Pi_Aac001;
- If v_Count_Skc81 > 0 Then
- Select Nvl(a.Aae240, 0)
- Into v_Aae240
- From Skc81 a
- Where a.Aac001 = Pi_Aac001;
- If v_Aae240 > 0 Then
- /*po_fhz := v_prcName || '_91,医疗账户余额为' || v_aae240 || '元 ,因此不允许修改';*/
- Po_Fhz := v_Prcname ||
- '_91,职工医疗账户不为0,此模块不允许修改身份证号,请到本人参保地核实身份证号在其他业务模块办理!';
- Po_Msg := Pkg_Fun.f_Errmsg(v_Prcname, Sqlcode, Sqlerrm, v_Params);
- Return;
- /*享受五险待遇的不能修改,所以包括了失业 享受五险待遇的不能修改,
- 所以包括了失业 没办卡,又享受了失业待遇的 而且个人医保账户为0的*/
- --如果账户小于0,且
- Elsif v_Aae240 <= 0 Then
- Begin
- Select Aac002
- Into v_Aac002_Tmp
- From Ac01
- Where Aac001 = Pi_Aac001;
- Select Count(*)
- Into v_Count_Cardinfo
- From Card_Info a
- Where a.Idcard = v_Aac002_Tmp;
- If v_Count_Cardinfo = 0 Then
- --如果没有卡信息,然后再对五险进行判断,
- --add 20150224 有卡也要进行判断
- Select Count(*)
- Into v_Count_Ac60
- From Ac60
- Where Aaa076 In ('',
- '',
- '',
- '',
- '',
- '',
- '',
- '')
- And Aae116 <> 4
- And Aac001 = Pi_Aac001;
- If v_Count_Ac60 > 0 Then
- Po_Fhz := v_Prcname || '_-92,' ||
- '该人员没有卡信息,但是有享受待遇,不能修改身份证,请到本人参保地核实身份证号在其他业务模块办理!!';
- Po_Msg := Pkg_Fun.f_Errmsg(v_Prcname,
- Sqlcode,
- Sqlerrm,
- v_Params);
- Return;
- End If;
- --add 20150224 有卡也要进行判断
- Elsif v_Count_Cardinfo > 0 Then
- Select Count(*)
- Into v_Count_Ac60
- From Ac60
- Where Aaa076 In ('',
- '',
- '',
- '',
- '',
- '',
- '',
- '')
- And Aae116 <> 4
- And Aac001 = Pi_Aac001;
- If v_Count_Ac60 > 0 Then
- Po_Fhz := v_Prcname || '_-92,' ||
- '该人员有卡信息,且有享受待遇,不能修改身份证,请到本人参保地核实身份证号在其他业务模块办理!';
- Po_Msg := Pkg_Fun.f_Errmsg(v_Prcname,
- Sqlcode,
- Sqlerrm,
- v_Params);
- Return;
- End If;
- End If;
- Exception
- When No_Data_Found Then
- Po_Fhz := v_Prcname || '_-91,没有找到该人员的基本信息';
- Po_Msg := Pkg_Fun.f_Errmsg(v_Prcname,
- Sqlcode,
- Sqlerrm,
- v_Params);
- End;
- End If;
- End If;
- End;
- -- 2 信息中心提出的要求,有工伤认定的,也不允许修改
- Begin
- Select Count(*) Into v_Lc31_Count From Lc31 Where Aac001 = Pi_Aac001;
- If v_Lc31_Count > 0 Then
- Po_Fhz := v_Prcname ||
- '_92,该人员存在工伤认定记录,不能修改身份证,请到本人参保地核实身份证号在其他业务模块办理!';
- Po_Msg := Pkg_Fun.f_Errmsg(v_Prcname, Sqlcode, Sqlerrm, v_Params);
- Return;
- End If;
- End;
- -- 3 住院的不能修改身份证,
- Begin
- Select Count(1)
- Into v_Count_Kc21
- From Kc21
- Where Aac001 = Pi_Aac001
- And Ckc544 = '';
- If v_Count_Kc21 > 0 Then
- /*po_fhz := v_prcName||'_-93,该人员存在在院记录,不允许修改身份证!';*/
- Po_Fhz := '_-93,该人员存在在院记录,不能修改身份证,请到本人参保地核实身份证号在其他业务模块办理!';
- Po_Msg := Pkg_Fun.f_Errmsg(v_Prcname, Sqlcode, Sqlerrm, v_Params);
- Rollback;
- Return;
- End If;
- End;
- Exception
- When Others Then
- Po_Msg := Pkg_Fun.f_Errmsg(v_Prcname, Sqlcode, Sqlerrm, v_Params);
- Po_Fhz := '-1';
- End Validateidcard;
- /*校验身份证是否合法,包括长度,身份证字母*/
- Procedure Vali_Idcard_Lenandchar(Pi_Aac002 In Varchar2,
- Po_Fhz Out Varchar2,
- Po_Msg Out Varchar2) Is
- v_Aac002 Ac01.Aac002%Type;
- v_Count Number(2);
- v_Params Varchar2(500) := ',传入参数 pi_aac002 = ' || Pi_Aac002;
- v_Procname Varchar2(50) := c_Pkg_Name || '.vali_IdCard_lenAndChar';
- v_Aac002_n Number(20); -- 数值型,用于接收转换后的身份证号
- v_Char Varchar2(2); -- 用于接收字符
- v_Char2 Varchar2(2);
- Begin
- -- 初始化返回值
- Po_Fhz := '';
- Po_Msg := Pkg_Fun.f_Errmsg(v_Procname, Sqlcode, Sqlerrm, v_Params);
- Select Count(*) Into v_Count From Ac01 Where Aac002 = Pi_Aac002;
- If v_Count > 0 Then
- Select Trim(Pi_Aac002) Into v_Aac002 From Dual;
- -- 检查是否为18位
- If Length(v_Aac002) <> 18 Then
- Po_Fhz := v_Procname || '_-91,身份证长度不为18位';
- Po_Msg := Pkg_Fun.f_Errmsg(v_Procname, Sqlcode, Sqlerrm, v_Params);
- Return;
- End If;
- Begin
- -- 检查前17位是否有字母
- v_Aac002 := Substr(v_Aac002, 1, Length(v_Aac002) - 1);
- v_Aac002_n := To_Number(v_Aac002);
- Exception
- When Value_Error Then
- Po_Fhz := v_Procname || '_-92,身份证的前17位中含有非数值型字符';
- Po_Msg := Pkg_Fun.f_Errmsg(v_Procname, Sqlcode, Sqlerrm, v_Params);
- Return;
- End;
- -- 如果最后一位是字母,;
- Begin
- -- 检查前17位是否有字母
- Select Trim(Aac002)
- Into v_Aac002
- From Ac01
- Where Aac002 = Pi_Aac002;
- v_Aac002 := Substr(v_Aac002, Length(v_Aac002), 1);
- v_Aac002_n := To_Number(v_Aac002);
- Exception
- When Value_Error Then
- -- 说明最后一位是字母
- -- 如果最后一位是字母,检查最后一位数是否为x;
- Select Chr(88) Into v_Char From Dual;
- Select Upper((Substr(v_Aac002, Length(v_Aac002), 1)))
- Into v_Char2
- From Dual; --存放截取的最后一位字符
- If v_Char2 <> v_Char Then
- Po_Fhz := v_Procname || '_-93,身份证的最后一位不是大写的X';
- Po_Msg := Pkg_Fun.f_Errmsg(v_Procname,
- Sqlcode,
- Sqlerrm,
- v_Params);
- Return;
- End If;
- End;
- End If;
- Exception
- When Others Then
- Po_Fhz := v_Procname || '_-94,未知错误';
- Po_Msg := Pkg_Fun.f_Errmsg(v_Procname, Sqlcode, Sqlerrm, v_Params);
- End Vali_Idcard_Lenandchar;
- --修改身份证号
- Procedure Updateidcard_Fortest(Pi_Aac002 In Varchar2,
- Pi_Aac002_New In Varchar2,
- Pi_Aae013 In Varchar2,
- Pi_Aae011 In Varchar2,
- Pi_Bae001 In Varchar2,
- Po_Fhz Out Varchar2,
- Po_Msg Out Varchar2) Is
- v_Aac001 Ac02.Aac001%Type;
- v_Prc Varchar2(200);
- v_Aab001 Ac02.Aab001%Type;
- v_Yl_Count Number(2); --养老待遇记录数
- v_Msg Varchar2(200);
- v_Aaa076 Ac60.Aaa076%Type;
- v_Prcname Varchar2(200);
- v_Params Varchar2(500);
- Begin
- -- 初始化返回值
- Po_Fhz := '';
- Po_Msg := '';
- v_Prc := '.updateIDCard_fortest';
- v_Prcname := c_Pkg_Name || v_Prc;
- v_Params := ',传入参数为:pi_aac002=' || Pi_Aac002 || ',pi_aac002_new=' ||
- Pi_Aac002_New || ',pi_aae013' || Pi_Aae013 ||
- ',pi_aae011=' || Pi_Aae011 || ',pi_bae001=' || Pi_Bae001;
- Select Aac001, Aab001
- Into v_Aac001, v_Aab001
- From Ac01
- Where Aac002 = Pi_Aac002;
- -- 先做 是否有养老待遇的判断,如果有就直接返回,不更新ac01.aac002
- Select Count(1) Into v_Yl_Count From Ac60 Where Aac001 = v_Aac001;
- If v_Yl_Count > 0 Then
- -- 如果有养老待遇,那么抛出更详细的结果,以便于前台更容易理解
- -- 只取第一条
- Select Aaa076
- Into v_Aaa076
- From Ac60
- Where Aac001 = v_Aac001
- And Rownum = 1;
- Select Func_Wyl('AAA076', v_Aaa076) Into v_Msg From Dual;
- Po_Fhz := '-1';
- Po_Msg := Pkg_Name || v_Prc ||
- '执行失败,该人员有待遇享受信息,此模块不允许修改身份证号!养老待遇类型为 "' || v_Msg ||
- '" 的养老待遇,且待遇状态正常';
- Return;
- End If;
- -- 更新ac01.AAC002
- Update Ac01 Set Aac002 = Pi_Aac002_New Where Aac001 = v_Aac001;
- Insert Into Ac25
- (Aaz163,
- Bae001,
- Aab001,
- Aac001,
- Cae129,
- Aac050,
- Aae160,
- Cac038,
- Bae007,
- Aae011,
- Aae036,
- Bce326,
- Aae012,
- Bhe949,
- Cae030,
- Cae031,
- Aae013)
- Values
- (Seq_Bxgx_Aaz163.Nextval, --使用原来的序列号
- Pi_Bae001,
- v_Aab001,
- v_Aac001,
- '',
- '', -- 50,变更类型为 修改资料
- '', -- 1933,变更原因, 其它
- '',
- '', -- 业务流水号
- Pi_Aae011,
- To_Char(Sysdate, 'yyyymmddhh24miss'),
- '',
- Pi_Aae011,
- To_Char(Sysdate, 'yyyymmddhh24miss'),
- '',
- '',
- Pi_Aae013);
- Exception
- When No_Data_Found Then
- -- Sqlcode, Sqlerrm
- Po_Fhz := v_Prcname || '_01';
- Po_Msg := '过程' || Pkg_Name || v_Prc || '报错,ac01表里没有找到该人员,sqlcode:' ||
- Sqlcode || ',sqlerrm:' || Sqlerrm;
- Po_Msg := Pkg_Fun.f_Errmsg(v_Prcname, Sqlcode, Sqlerrm, v_Params);
- Return;
- End Updateidcard_Fortest;
- -- 截取字符串
- -- create or replace type split_type is table of varchar2(4000)
- -- 取出字符串的方法 : select column_value from table (pkg_weiyl.split_dh('dd,aa,134'));
- Function Split_Dh(p_Str In Varchar2,
- p_Delimiter In Varchar2 Default (',') --分隔符,默认逗号
- ) Return Split_Type Is
- j Int := 0;
- i Int := 1;
- Len Int := 0;
- Len1 Int := 0;
- Str Varchar2(4000);
- My_Split Split_Type := Split_Type();
- Begin
- -- 要分割的字符串的长度
- Len := Length(p_Str);
- -- 分隔符的长度
- Len1 := Length(p_Delimiter);
- While j < Len Loop
- j := Instr(p_Str, p_Delimiter, i);
- If j = 0 Then
- j := Len;
- Str := Substr(p_Str, i);
- My_Split.Extend;
- My_Split(My_Split.Count) := Str;
- If i >= Len Then
- Exit;
- End If;
- Else
- Str := Substr(p_Str, i, j - i);
- i := j + Len1;
- My_Split.Extend;
- My_Split(My_Split.Count) := Str;
- End If;
- End Loop;
- Return My_Split;
- End Split_Dh;
- --字典转换,把代码值转换成对应的可理解的中文,卫永乐,20141105
- Function Func_Wyl(Pi_Aaa100 Varchar2, Pi_Aaa102 Varchar2) Return Varchar2 Is
- v_Aaa103 Varchar2(1000);
- Begin
- Select Aaa103
- Into v_Aaa103
- From Aa10 a
- Where a.Aaa100 = Pi_Aaa100
- And a.Aaa102 = Pi_Aaa102;
- Return v_Aaa103;
- Exception
- When No_Data_Found Then
- Dbms_Output.Put_Line('没有找到数据');
- End;
- Function Func_Check_Para(Pi_Aab999 In Varchar2, --单位编号
- Pi_Pch In Varchar2, --批次号
- Pi_Aae001 In Number,
- Pi_Aae036 In Varchar2,
- Pi_Aac027 In Number)
- /*拼接where条件 过程 check_sdnmdc 的游标的where条件*/
- Return Varchar2 Is
- v_where varchar2(500);
- Begin
- /*v_where := ' where 1=1 and ';*/
- v_where := ' null or 1=1 ';
- /*Select * From v_sdnm_sjql_dc Where Aab999 = To_Char(Pi_Aab999);*/
- if pi_aab999 <> '' then
- v_where := v_where || ' and aab999=''' || pi_aab999 || '''';
- elsif Pi_Aab999 = '' then
- v_where := ' null or 1=1 ';
- end if;
- if Pi_Aae001 <> '' then
- v_where := v_where || ' and aae001=' || pi_aae001;
- /*elsif Pi_Aae001 = '0' then
- v_where := v_where||' and aae001='||pi_aae001;*/
- end if;
- if Pi_Aae036 <> '' then
- v_where := v_where || ' and substr(aae036,1,6)=''' || Pi_Aae036 || '''';
- /*elsif Pi_Aae036 = '0' then
- v_where := v_where||' and substr(aae036,1,6)='''||Pi_Aae036||'''';*/
- end if;
- if Pi_Aac027 <> '' then
- v_where := v_where || ' and aac027=' || Pi_Aac027 || ' ';
- end if;
- Return v_where;
- End Func_Check_Para;
- /*
- added 20160801
- 获取月份差值,主要针对于转移统计的
- */
- function getMonthNum(pi_ksyf in number,
- pi_zzyf in number,
- pi_aae180 in number) return number is
- v_mon number(3);
- begin
- /*
- 如果 sac14 的 aae041 201601 ,aae042 201602 ,aae180 0 ,这种情况总的月份 就算是0 ,(201602-201601+1)*aae180
- 否则 就算是201602-201601+1 = 2 ;
- */
- if nvl(pi_aae180, 0) != 0 and pi_zzyf >= pi_ksyf then
- v_mon := pi_zzyf - pi_ksyf + 1;
- else
- v_mon := 0;
- end if;
- return v_mon;
- end getMonthNum;
- --县级公立医院支付
- Procedure Xjyyzf(Pi_Bae007 In Varchar2,
- Pi_Operid In Varchar2,
- Pi_Aae037 In Varchar2,
- Pi_Aae038 In Varchar2,
- Po_Fhz Out Varchar2,
- Po_Msg Out Varchar2) Is
- v_Bae007 Skc70.Bae007%Type;
- v_Time Skc70.Aae015%Type;
- Cursor c_Bae007 Is
- Select Column_Value From Table(Pkg_Weiyl.Split_Dh(Pi_Bae007));
- Begin
- Po_Msg := '成功';
- Po_Fhz := '';
- Select To_Char(Sysdate, 'yyyymmddhh24miss') Into v_Time From Dual;
- For v_Bae007 In c_Bae007 Loop
- -- 清空改经办人的临时表
- Delete From t_Skc70 a
- Where a.Bae007 = Pi_Bae007
- And a.Aae011 = Pi_Operid;
- Insert Into t_Skc70
- (Bae007, Aae011)
- Values
- (v_Bae007.Column_Value, Pi_Operid);
- Update Skc70
- Set Aae117 = '',
- Cae295 = Pi_Operid,
- Aae015 = v_Time,
- Aae037 = Substr(Pi_Aae037, 1, 8),
- Aae038 = Substr(Pi_Aae038, 1, 8)
- Where Bae007 = v_Bae007.Column_Value;
- End Loop;
- Exception
- When Others Then
- Rollback;
- Po_Msg := '失败';
- Po_Fhz := '-1';
- End Xjyyzf;
- --- 循环调用的过程,解决每次都要自己写一个declare plsql代码块,
- --入参:还没写完
- Procedure Prc_Xunhuan(Pi_Prcname In Varchar2, --要调用的过程名
- Pi_Tabname In Varchar2, --cursor取值的表
- Po_Fhz Out Varchar2,
- Po_Msg Out Varchar2) Is
- v_Prcname Varchar2(400) := '.prc_xunhuan';
- v_Params Varchar2(200) := 'pi_prcName=' || Pi_Prcname ||
- ',pi_tabName:' || Pi_Tabname;
- /*cursor cur_xunhuan is
- select * from pi_tabName where aac001 = '';*/
- Begin
- Null;
- Exception
- When Others Then
- Po_Fhz := '';
- Po_Msg := Pkg_Fun.f_Errmsg(v_Prcname, Sqlcode, Sqlerrm, v_Params);
- End;
- Procedure Xjyyzf_Callback(Pi_Bae007 In Varchar2,
- Pi_Operid In Varchar2,
- Po_Fhz Out Varchar2,
- Po_Msg Out Varchar2) Is
- v_Bae007 Skc70.Bae007%Type;
- v_Time Skc70.Aae015%Type;
- Cursor c_Bae007 Is
- Select Column_Value From Table(Pkg_Weiyl.Split_Dh(Pi_Bae007));
- Begin
- Po_Msg := '成功';
- Po_Fhz := '';
- For v_Bae007 In c_Bae007 Loop
- -- 清空改经办人的临时表
- Delete From t_Skc70 a
- Where a.Bae007 = v_Bae007.Column_Value
- And a.Aae011 = Pi_Operid;
- End Loop;
- Exception
- When Others Then
- --rollback;
- Po_Msg := '失败';
- Po_Fhz := '-1';
- End Xjyyzf_Callback;
- --县级公立医院支付取消
- Procedure Xjyyzfqx(Pi_Bae007 In Varchar2,
- Po_Fhz Out Varchar2,
- Po_Msg Out Varchar2) Is
- v_Bae007 Skc70.Bae007%Type;
- Cursor c_Bae007 Is
- Select Column_Value From Table(Pkg_Weiyl.Split_Dh(Pi_Bae007));
- Begin
- Po_Msg := '成功';
- Po_Fhz := '';
- For v_Bae007 In c_Bae007 Loop
- --清空临时表
- Delete From t_Skc70 Where Bae007 = v_Bae007.Column_Value;
- Update Skc70 Set Aae117 = '' Where Bae007 = v_Bae007.Column_Value;
- End Loop;
- Exception
- When Others Then
- Po_Msg := '失败';
- Po_Fhz := '-1';
- End Xjyyzfqx;
- /*自治事务*/
- Procedure Autonomous_Tran(Pi_Aac001 In Varchar2,
- Po_Fhz Out Varchar2,
- Po_Msg Out Varchar2) Is
- Pragma Autonomous_Transaction; --自治事务关键字
- v_Proname Varchar2(400);
- v_Aab001 Number(20);
- Begin
- Po_Fhz := '';
- Po_Msg := '成功!';
- v_Aab001 := Seq_Bxgx_Aab001.Nextval;
- Insert Into Xzl_One (Aac002) Values (v_Aab001); -- v_aab001 是number,竟然可以插入varchar2类型字段
- --commit;
- Update Xzl_One
- Set Aac003 =
- (v_Aab001 || '姓名')
- Where Aac002 = v_Aab001 || ''; --但是查却没法查到
- Commit;
- Exception
- When Others Then
- Rollback;
- Po_Fhz := '-1';
- Po_Msg := '失败,' || Sqlcode || ',sqlerrm:' || Sqlerrm;
- Return;
- End Autonomous_Tran;
- /*手工添加表级锁,使用场景,如果要操作一张大表的大部分数据,
- 如果不加表级锁,那么就会耗费大量的资源,这种情况下可以使用
- 手工给表加锁,释放方式 rollback,或者commit
- 使用目的:更改 ac02_tmp表 的险种状态,ac02_tmp 表结构和数据
- 和ac02的一样
- */
- Procedure Update_Ac02_Aae140(Pi_Aae140 In Varchar2,
- Pi_Fhz Out Varchar2,
- Po_Msg Out Varchar2) Is
- Cursor Cur_Ac02 Return Ac02_Tmp%Rowtype Is
- Select * From Ac02_Tmp Where Aae140 = Pi_Aae140;
- v_Cur_Ac02 Ac02_Tmp%Rowtype;
- Begin
- --sys.dbms_profiler.start_profiler;
- Lock Table Ac02_Tmp In Exclusive Mode Nowait;
- Open Cur_Ac02;
- Loop
- Fetch Cur_Ac02
- Into v_Cur_Ac02;
- Exit When Cur_Ac02%Notfound; --检查是否找到,
- -- 找到的话就就更新
- Update Ac02_Tmp
- Set Aac008 = ''
- Where Aae140 = Pi_Aae140
- And Aac008 = '';
- Null;
- End Loop;
- Close Cur_Ac02;
- Commit; --释放表级锁
- --sys.dbms_profiler.stop_profiler;
- End Update_Ac02_Aae140;
- Procedure Querycheck(Pi_Aac002 In Varchar2,
- Pi_Aac003 In Varchar2,
- Po_Fhz Out Varchar2,
- Po_Msg Out Varchar2) Is
- v_Count Number(2);
- Begin
- --初始化返回值
- Po_Fhz := '-1';
- Po_Msg := '失败,该人员没有卡信息';
- If Pi_Aac002 = '' Then
- Select Count(*) Into v_Count From Card_Info Where Name = Pi_Aac003;
- If v_Count > 0 Then
- Po_Fhz := '';
- Po_Msg := '成功';
- End If;
- End If;
- If Pi_Aac003 = '' Then
- Select Count(*) Into v_Count From Card_Info Where Idcard = Pi_Aac002;
- If v_Count > 0 Then
- Po_Fhz := '';
- Po_Msg := '成功';
- End If;
- End If;
- End;
- Procedure Check_Ac02(Pi_Aac002 In Varchar2,
- Po_Aac001 Out Number,
- Po_Cac012 Out Varchar2,
- Po_Aab001 Out Varchar2,
- Po_Fhz Out Varchar2,
- Po_Msg Out Varchar2) Is
- v_Count1 Number(2);
- v_Count2 Number(2);
- v_Count3 Number(2);
- v_Aab001 Ac02.Aab001%Type;
- v_Aac001 Ac01.Aac001%Type;
- v_Cac012 Sac01.Cac012%Type;
- Begin
- -- 初始化返回值
- Po_Fhz := '';
- Select Count(1) Into v_Count1 From Ac01 Where Aac002 = Pi_Aac002;
- If v_Count1 <= 0 Then
- Po_Msg := '该人员不存在';
- Po_Fhz := '-1';
- Return;
- End If;
- Select Aac001 Into v_Aac001 From Ac01 Where Aac002 = Pi_Aac002;
- Select Count(1) Into v_Count2 From Sac01 Where Aac001 = v_Aac001;
- If v_Count2 <= 0 Then
- Po_Msg := '该人员缺少对应的sac01的信息,';
- Po_Fhz := '-1';
- Return;
- End If;
- Select a.Cac012 Into v_Cac012 From Sac01 a Where Aac001 = v_Aac001;
- Select Count(1)
- Into v_Count3
- From Ac02
- Where Aae140 = ''
- And Aac001 = v_Aac001
- And Aac008 = '';
- If v_Count3 <= 0 Then
- Po_Msg := '该人员没有正常参保';
- Po_Fhz := '-1';
- Return;
- End If;
- Select Distinct (Aab001)
- Into v_Aab001
- From Ac02
- Where Aac001 = v_Aac001
- And Aae140 = ''
- And Aac008 = '';
- Po_Aab001 := v_Aab001;
- Po_Aac001 := v_Aac001;
- Po_Cac012 := v_Cac012;
- End;
- Procedure Check_Skc84(Pi_Aac001 In Varchar2,
- Po_Fhz Out Varchar2,
- Po_Msg Out Varchar2) Is
- v_Count1 Number(2);
- v_Count2 Number(2);
- v_Aac001 Ac01.Aac001%Type;
- Begin
- -- 初始化返回值
- Po_Fhz := '';
- Select Count(1)
- Into v_Count1
- From Skc84
- Where Aac001 = Pi_Aac001
- And Aae140 = '';
- If v_Count1 <= 0 Then
- Po_Msg := '该人员不存在当年的医保缴费';
- Po_Fhz := '-1';
- Return;
- End If;
- End;
- /*失地农民数据清理导出前,
- 把导出的数据保存到ic58里,防止再次导出
- */
- Procedure Check_Sdnmdcc(Pi_Aab999 In Varchar2,
- PI_PCH in varchar2,
- Po_Fhz Out Varchar2,
- Po_Msg Out Varchar2) Is
- v_Aac001 Ac01.Aac001%Type;
- v_Prcname Varchar2(200);
- v_Params Varchar2(200);
- v_Ic58_Count Number(5);
- Cursor c_Ydcry Is
- Select * From v_Sdnm_Sjql_Dc Where Aab999 = To_Char(Pi_Aab999);
- Begin
- v_Prcname := 'pkg_weiyl.check_sdnmdc';
- v_Params := 'pi_aab999:' || Pi_Aab999;
- Po_Fhz := '';
- Po_Msg := '成功';
- /*清空ic61*/
- For c_Tmp In c_Ydcry Loop
- Insert Into Ic58 (Aac001, Aab999) Values (c_Tmp.Aac001, Pi_Aab999);
- /*导出用这个表*/
- Insert Into Ic61 (Aac001, Aab999) Values (c_Tmp.Aac001, Pi_Aab999);
- /*加入批次号 */
- insert into ic58_dc
- (aac001, aab999, aaz601)
- values
- (c_Tmp.Aac001, Pi_Aab999, PI_PCH);
- End Loop;
- Select Count(1) Into v_Ic58_Count From Ic58 Where Aab999 = Pi_Aab999;
- If v_Ic58_Count > 0 Then
- Po_Fhz := '';
- Po_Msg := '该单位已经进行过导出业务的操作,此次导出将导出该单位下剩余部分的人员,如果之前已经全部导出,那么此次将不导出数据';
- End If;
- Exception
- When Others Then
- Po_Msg := Pkg_Fun.f_Errmsg(v_Prcname, Sqlcode, Sqlerrm, v_Params);
- Po_Fhz := '-1';
- End Check_Sdnmdcc;
- /*
- 现在正在使用的失地农民数据导出
- 这里使用了动态sql,
- 注意点:在存储过程里的增删改查语句如果有拼接,
- 那么一定要用动态sql,否则可能能够编译通过,但是
- 执行的时候没有达到预期。因为:拼接的where条件很可能被
- 引擎当作普通字符串处理,也就什么都没查得到,自然更新数据就没法更新成功
- */
- Procedure Check_Sdnmdc(Pi_Bae001 In Varchar2,
- Pi_Aab999 In Varchar2,
- Pi_Pch In Varchar2,
- /* PI_GLT in varchar2,*/
- Pi_Aae001 In Varchar2,
- Pi_Aae036 In Varchar2,
- Pi_Aac027 In Varchar2,
- Pi_Bzw In Varchar2,
- Pi_Oper In Varchar2,
- Po_Fhz Out Varchar2,
- Po_Msg Out Varchar2) Is
- v_Aac001 Ac01.Aac001%Type;
- v_Prcname Varchar2(200);
- v_Params Varchar2(200);
- v_Ic58_Count Number(5);
- v_Tmp Varchar2(400);
- v_Sql Varchar2(1000);
- Cursor c_Ydcry Is
- Select *
- From v_Sdnm_Sjql_Dc_Multi
- Where Aab999 = Func_Check_Para(Pi_Aab999,
- Pi_Pch,
- Pi_Aae001,
- Pi_Aae036,
- Pi_Aac027);
- Begin
- v_Prcname := 'pkg_weiyl.check_sdnmdc';
- v_Params := 'pi_aab999:' || Pi_Aab999;
- Po_Fhz := '';
- Po_Msg := '成功';
- /*拼接where条件*/
- Select Func_Check_Para(Pi_Aab999,
- Pi_Pch,
- Pi_Aae001,
- Pi_Aae036,
- Pi_Aac027)
- Into v_Tmp
- From Dual;
- /*insert into ic58_dcsj() values (select * from v_sdnm_sjql_dc a where 1=1 and aab999 = '02002489');*/
- /*v_Sql := 'Insert Into Ic58_Dcsj
- Select a.*, ' || To_Char(Sysdate, 'yyyymmddhh24miss') || ',' ||
- Pi_Pch || ',' || '1' || '
- From v_Sdnm_Sjql_Dc a
- Where a.bae001 = '''||Pi_Bae001||''' and Aab999 = ' || v_Tmp ||
- ' And Not Exists (Select *
- From Ic58_Dcsj z
- Where z.Aaz288 = a.Aaz288
- And z.Aac001 = a.Aac001) ';*/
- -- 20160505 altered
- /* v_Sql := 'Insert Into Ic58_Dcsj
- Select a.*, ' || To_Char(Sysdate, 'yyyymmddhh24miss') || ',' ||
- Pi_Pch || ',' || '''' || Pi_Bzw || '''' || ',''' || Pi_Oper || '''
- From v_Sdnm_Sjql_Dc a
- Where Aab999 = ' || v_Tmp || ' and bae001 = ''' ||
- pi_bae001 || ''' And Not Exists (Select *
- From Ic58_Dcsj z
- Where z.Aaz288 = a.Aaz288
- And z.Aac001 = a.Aac001) ';*/
- v_Sql := 'Insert Into Ic58_Dcsj
- Select a.*, ' || '1,' ||
- To_Char(Sysdate, 'yyyymmddhh24miss') || ',' || Pi_Pch || ',' || '''' ||
- Pi_Bzw || '''' || ',''' || Pi_Oper || '''
- From v_Sdnm_Sjql_Dc a
- Where Aab999 = ' || v_Tmp || ' and bae001 = ''' ||
- pi_bae001 || ''' And Not Exists (Select *
- From Ic58_Dcsj z
- Where z.Aaz288 = a.Aaz288
- And z.Aac001 = a.Aac001) ';
- Execute Immediate v_Sql;
- /*清空ic61*/
- /*For c_Tmp In c_Ydcry Loop
- Insert Into Ic58 (Aac001, Aab999) Values (c_Tmp.Aac001, Pi_Aab999);
- 导出用这个表
- Insert Into Ic61 (Aac001, Aab999) Values (c_Tmp.Aac001, Pi_Aab999);
- 加入批次号
- Insert Into Ic58_Dc
- (Aac001, Aab999, Aaz601, Bzw)
- Values
- (c_Tmp.Aac001, Pi_Aab999, Pi_Pch, '1');
- 备份失地农民数据
- update ic58_dcsj q set q.dcsj=To_Char(Sysdate, 'yyyymmddhh24miss'),q.aaz601=PI_PCH;
- End Loop;*/
- /*Select Count(1) Into v_Ic58_Count From Ic58 Where Aab999 = Pi_Aab999;*/
- Select Count(1)
- Into v_Ic58_Count
- From Ic58_Dcsj
- Where Aaz601 <> Pi_Pch
- And Aab999 = Pi_Aab999;
- If v_Ic58_Count > 0 Then
- Po_Fhz := '';
- Po_Msg := '该单位已经进行过导出业务的操作,此次导出将导出该单位下剩余部分的人员,如果之前已经全部导出,那么此次将不导出数据';
- End If;
- Exception
- When Others Then
- Po_Msg := Pkg_Fun.f_Errmsg(v_Prcname, Sqlcode, Sqlerrm, v_Params);
- Po_Fhz := '-1';
- End Check_Sdnmdc;
- /*失地农民数据清理导出前,
- 把导出的数据保存到ic58里,防止再次导出
- 导出单条的check
- 02002489
- */
- Procedure Check_Sdnmdc_Multi(Pi_Bae001 In Varchar2,
- Pi_Aab999 In Varchar2,
- Pi_Pch In Varchar2,
- /* PI_GLT in varchar2,*/
- Pi_Aae001 In Varchar2,
- Pi_Aae036 In Varchar2,
- Pi_Aac027 In Varchar2,
- Pi_Bzw In Varchar2,
- Pi_Oper In Varchar2,
- Po_Fhz Out Varchar2,
- Po_Msg Out Varchar2) Is
- v_Aac001 Ac01.Aac001%Type;
- v_Prcname Varchar2(200);
- v_Params Varchar2(200);
- v_Ic58_Count Number(5);
- v_Tmp Varchar2(400);
- v_Sql Varchar2(1000);
- Cursor c_Ydcry Is
- Select *
- From v_Sdnm_Sjql_Dc
- Where Aab999 = Func_Check_Para(Pi_Aab999,
- Pi_Pch,
- Pi_Aae001,
- Pi_Aae036,
- Pi_Aac027);
- Begin
- v_Prcname := 'pkg_weiyl.Check_Sdnmdc_Multi';
- v_Params := 'pi_aab999:' || Pi_Aab999;
- Po_Fhz := '';
- Po_Msg := '成功';
- /*拼接where条件*/
- Select Func_Check_Para(Pi_Aab999,
- Pi_Pch,
- Pi_Aae001,
- Pi_Aae036,
- Pi_Aac027)
- Into v_Tmp
- From Dual;
- /*insert into ic58_dcsj() values (select * from v_sdnm_sjql_dc a where 1=1 and aab999 = '02002489');*/
- /*v_Sql := 'Insert Into Ic58_Dcsj
- Select a.*, ' || To_Char(Sysdate, 'yyyymmddhh24miss') || ',' ||
- Pi_Pch || ',' || ''''||Pi_Bzw||''''||','''|| Pi_Oper|| '''
- From v_Sdnm_Sjql_Dc_multi a
- Where Aab999 = ' || v_Tmp ||
- ' and bae001 = '''||pi_bae001||''' And Not Exists (Select *
- From Ic58_Dcsj z
- Where z.Aaz288 = a.Aaz288
- And z.Aac001 = a.Aac001) ';*/
- v_Sql := 'Insert Into Ic58_Dcsj
- Select a.*, ' || To_Char(Sysdate, 'yyyymmddhh24miss') || ',' ||
- Pi_Pch || ',' || '''' || Pi_Bzw || '''' || ',''' || Pi_Oper || '''
- From v_Sdnm_Sjql_Dc_multi a
- Where Aab999 = ' || v_Tmp || ' and bae001 = ''' ||
- pi_bae001 || ''' And Not Exists (Select *
- From Ic58_Dcsj z
- Where z.Aaz288 = a.Aaz288
- And z.Aac001 = a.Aac001) ';
- Execute Immediate v_Sql;
- /*清空ic61*/
- /*For c_Tmp In c_Ydcry Loop
- Insert Into Ic58 (Aac001, Aab999) Values (c_Tmp.Aac001, Pi_Aab999);
- 导出用这个表
- Insert Into Ic61 (Aac001, Aab999) Values (c_Tmp.Aac001, Pi_Aab999);
- 加入批次号
- Insert Into Ic58_Dc
- (Aac001, Aab999, Aaz601, Bzw)
- Values
- (c_Tmp.Aac001, Pi_Aab999, Pi_Pch, '1');
- 备份失地农民数据
- update ic58_dcsj q set q.dcsj=To_Char(Sysdate, 'yyyymmddhh24miss'),q.aaz601=PI_PCH;
- End Loop;*/
- /*Select Count(1) Into v_Ic58_Count From Ic58 Where Aab999 = Pi_Aab999;*/
- Select Count(1)
- Into v_Ic58_Count
- From Ic58_Dcsj
- Where Aaz601 <> Pi_Pch
- And Aab999 = Pi_Aab999;
- If v_Ic58_Count > 0 Then
- Po_Fhz := '';
- Po_Msg := '该单位已经进行过导出业务的操作,此次导出将导出该单位下剩余部分的人员,如果之前已经全部导出,那么此次将不导出数据';
- End If;
- Exception
- When Others Then
- Po_Msg := Pkg_Fun.f_Errmsg(v_Prcname, Sqlcode, Sqlerrm, v_Params);
- Po_Fhz := '-1';
- End Check_Sdnmdc_Multi;
- Procedure Updatekbb5(Pi_Bae007 In Varchar2,
- Pi_Ckz545 In Varchar2,
- Pi_Ckb626 In Varchar2,
- Pi_Ckb627 In Varchar2,
- Pi_Ckb629 In Varchar2,
- Pi_Ckb630 In Varchar2,
- Po_Fhz Out Varchar2,
- Po_Msg Out Varchar2) Is
- Begin
- Po_Fhz := '';
- Po_Msg := '成功';
- Update Kbb5
- Set Ckz545 = Pi_Ckz545,
- Ckb626 = Pi_Ckb626,
- Ckb627 = Pi_Ckb627,
- Ckb629 = Pi_Ckb629,
- Ckb630 = Pi_Ckb630
- Where Bae007 = Pi_Bae007;
- End;
- Procedure Getaaz601(Pi_Rc In Varchar2,
- po_aaz601 out number,
- Po_Fhz Out Varchar2,
- Po_Msg Out Varchar2) Is
- v_aaz601 ic58_dc.aaz601%type;
- Begin
- Po_Fhz := '';
- Po_Msg := '成功';
- Select Seq_Ggyw_Aaz601.Nextval into po_aaz601 From Dual;
- exception
- when others then
- po_msg := 'pkg_weiyl.Getaaz601 获取批次号失败';
- Po_Fhz := '-1';
- End;
- /*
- 知识库相关过程
- 20160323 by weiyongle
- */
- Procedure Insertfw_Zsk(PI_AAA200 in varchar2,
- Pi_Aae202 In Varchar2,
- Pi_Aaa203 In Varchar2,
- Pi_Aae008 In Varchar2,
- PI_AAE011 IN VARCHAR2,
- PI_AAE906 IN VARCHAR2,
- PI_BZ IN VARCHAR2,
- Po_Fhz Out Varchar2,
- Po_Msg Out Varchar2) is
- begin
- po_fhz := '';
- po_msg := '成功';
- null;
- /*如果是'1',那么说明是修改*/
- if pi_bz = '' then
- update fw_zsk
- set aae202 = Pi_Aae202,
- aaa203 = Pi_Aaa203,
- aae008 = pi_aae008,
- aae011 = PI_AAE011
- where aae906 = PI_AAE906;
- elsif pi_bz = '' then
- insert into fw_zsk
- (aaa200, aae202, aaa203, aae008, aae011, aae036, aae906)
- values
- (PI_AAA200,
- Pi_Aae202,
- Pi_Aaa203,
- pi_aae008,
- PI_AAE011,
- To_Char(Sysdate, 'yyyymmddhh24miss'),
- SEQ_FW_AAE906.Nextval);
- end if;
- exception
- when others then
- po_fhz := '-1';
- po_msg := '失败';
- end Insertfw_Zsk;
- /*拼接两个字符串,
- 练手嵌套存储过程
- 注意点:使用嵌套存储过程时,在declaration中可以同时定义变量
- 但是 定义的变量只能够写在嵌套存储过程的前面,否则没法编译通过
- 20160407
- */
- procedure testNestedPro(pi_xing in varchar2,
- pi_ming in varchar2,
- pi_aab001 in number,
- po_fhz out varchar2,
- po_msg out varchar2) is
- v_name varchar2(200);
- v_ac01_row ac01%rowtype;
- v_fhz varchar2(200);
- v_msg varchar2(200);
- v_procName varchar2(200);
- v_params varchar2(400);
- procedure print_name(pi_para1 in varchar2,
- pi_para2 in varchar2,
- po_name out varchar2) is
- begin
- po_name := pi_para1 || pi_para2;
- exception
- when others then
- po_name := '没有成功拼接两个入参';
- end print_name;
- procedure getAc01(pi_aab001 in number,
- po_ac01 out ac01%rowtype,
- po_fhz out varchar2,
- po_msg out varchar2) is
- v_procName varchar2(200);
- v_params varchar2(400);
- v_sqlcode varchar2(500);
- v_sqlerrm varchar2(500);
- begin
- --初始化
- v_procName := 'pkg_weiyl.getAc01';
- v_params := 'pi_aab001=' || pi_aab001;
- -- 这里是因为模拟 rowtype数据类型的情况,所以条件中加了 rownum=1 ,以确保select into 的时候只有一条数据 ,
- select a.*
- into po_ac01
- from ac01 a
- where a.aab001 = pi_aab001
- and rownum = 1;
- exception
- when others then
- v_sqlcode := sqlcode;
- v_sqlerrm := sqlerrm;
- po_fhz := v_procName || '_001';
- /* PKG_FUN.F_ERRMSG(V_PROCNAME, SQLCODE, SQLERRM, V_PARAMS);*/
- po_msg := pkg_fun.F_ERRMSG(v_procName, sqlcode, sqlerrm, v_params);
- pkg_weiyltools.get_e_msg(sqlerrm,
- 'po_ac01',
- 'AAB001',
- pi_aab001,
- ' where 条件',
- po_fhz,
- po_msg);
- return;
- end getAc01;
- begin
- --初始化 返回值
- po_fhz := '-1';
- po_msg := '失败';
- --初始化
- v_procName := 'pkg_weiyl.testNestedPro';
- v_params := 'pi_aab001=' || pi_aab001;
- print_name(pi_xing, pi_ming, v_name);
- if (length(v_name) > 100) then
- po_msg := '拼接的字符串太长!';
- else
- po_msg := '成功拼接,拼接好的字符串为:' || v_name;
- end if;
- begin
- /*select aac002 into v_test from ac01 where aac001 = 1234;*/
- -- 20160801 注释
- /*update ac01
- set aac001 = 1000035129
- where aac002 = '511011198604126824';*/
- begin
- getAc01(pi_aab001, v_ac01_row, v_fhz, v_msg);
- if v_fhz != '' then
- po_fhz := po_fhz || v_fhz;
- po_msg := po_msg || v_msg;
- return;
- else
- insert into ac01_temp
- values
- (v_ac01_row.BAE001,
- v_ac01_row.AAB001,
- v_ac01_row.AAC001,
- v_ac01_row.CAC002,
- v_ac01_row.AAC058,
- v_ac01_row.AAC002,
- v_ac01_row.AAC003,
- v_ac01_row.AAC004,
- v_ac01_row.AAC006,
- v_ac01_row.AAC007,
- v_ac01_row.CAC089,
- v_ac01_row.CAC090,
- v_ac01_row.AAC027,
- v_ac01_row.CAC005,
- v_ac01_row.AAC009,
- v_ac01_row.AAC013,
- v_ac01_row.AAE473,
- v_ac01_row.AAC020,
- v_ac01_row.CAC007,
- v_ac01_row.CAC008,
- v_ac01_row.CAC009,
- v_ac01_row.AAE200,
- v_ac01_row.CAC010,
- v_ac01_row.CAC011,
- v_ac01_row.CAC012,
- v_ac01_row.AAZ099,
- v_ac01_row.CAC121,
- v_ac01_row.CAE383,
- v_ac01_row.CAC161,
- v_ac01_row.AAE341,
- v_ac01_row.CAC201,
- v_ac01_row.CAC202,
- v_ac01_row.AAC015,
- v_ac01_row.AAC016,
- v_ac01_row.AAE013,
- v_ac01_row.CIE500,
- v_ac01_row.CIE501,
- v_ac01_row.AAC109,
- v_ac01_row.CIE503,
- v_ac01_row.CAC542,
- v_ac01_row.CAC546,
- v_ac01_row.CAC547,
- v_ac01_row.CAC549,
- v_ac01_row.AAB401,
- v_ac01_row.CKC695,
- v_ac01_row.CKE814,
- v_ac01_row.CAC560,
- v_ac01_row.CAC563,
- v_ac01_row.CAC564,
- v_ac01_row.JB_AAE200,
- v_ac01_row.CAC561_DISUSE);
- end if;
- exception
- when others then
- po_fhz := v_procName || '_02';
- po_msg := pkg_fun.F_ERRMSG(v_procName, sqlcode, sqlerrm, v_params);
- return;
- end;
- exception
- when others then
- pkg_weiyltools.get_e_msg(sqlerrm,
- 'AC01',
- 'aac001',
- '',
- ' where aac002 = 511011198604126824',
- po_fhz,
- po_msg);
- return;
- end;
- exception
- when others then
- po_fhz := '-1';
- po_msg := '失败';
- end testNestedPro;
- /*触摸屏查询标记*/
- procedure cancelCmp(PI_SERIALNUM in varchar2,
- po_fhz out varchar2,
- po_msg out varchar2) is
- v_Prc varchar2(40);
- v_Prcname varchar2(50);
- v_Params varchar2(400);
- v_Sqlerrm varchar2(100);
- begin
- --初始化
- -- 初始化返回值
- Po_Fhz := '';
- Po_Msg := '';
- v_Prc := '.updateIDCard';
- v_Prcname := c_Pkg_Name || v_Prc;
- v_Params := ',传入参数为:PI_SERIALNUM=' || PI_SERIALNUM;
- update printserialnum
- set bce326 = ''
- where SERIALNUM = PI_SERIALNUM
- and bce326 <> '';
- exception
- when others then
- v_Sqlerrm := Substr(Sqlerrm, 1, 9);
- /* 捕获,无效数字*/
- If v_Sqlerrm = 'ORA-01722' Then
- Po_Fhz := v_Prcname || '_3';
- Po_Msg := '数据库报错,提示无效数字,可能的原因是:入参:' || PI_SERIALNUM ||
- '可能是数值型,应该为字符串类型';
- return;
- else
- po_fhz := v_Prcname || '_1';
- po_msg := Pkg_Fun.f_Errmsg(v_Prcname, Sqlcode, Sqlerrm, v_Params);
- return;
- end if;
- end cancelCmp;
- /*取消征集通知单*/
- procedure cancelAaz288(PI_OPERID in varchar2,
- PI_AAZ288 in varchar2,
- po_fhz out varchar2,
- po_msg out varchar2) is
- v_cnt_ab07 number(3);
- v_cnt_ad21 number(2);
- v_cnt_ac43 number(4);
- v_Prc varchar2(400);
- v_aae111 ad21.aae111%type;
- begin
- -- 初始化返回值
- Po_Fhz := '';
- Po_Msg := '成功';
- v_Prc := '.cancelAaz288';
- /*校验*/
- select distinct (aae111)
- into v_aae111
- from V_BXGX_JJGL_ZZZJ_DWZSJHMX
- where aaz288 = PI_AAZ288;
- if v_aae111 <> '' then
- Po_Fhz := '-11';
- Po_Msg := '征收计划的到账标识不为【未到账】';
- return;
- end if;
- /*更新ab07*/
- select count(1) into v_cnt_ab07 from ab07 where aaz288 = PI_AAZ288;
- if v_cnt_ab07 > 0 then
- update ab07 set aaz288 = null where aaz288 = PI_AAZ288;
- end if;
- /*更新ad21*/
- select count(1) into v_cnt_ad21 from ad21 where aaz288 = PI_AAZ288;
- if v_cnt_ad21 > 0 then
- update ad21
- set cae033 = 2,
- cae030 = PI_OPERID,
- cae031 = to_char(sysdate, 'yyyymmddhh24miss')
- where aaz288 = PI_AAZ288;
- end if;
- /*更新ab43*/
- select count(1) into v_cnt_ac43 from ac43 where aaz288 = PI_AAZ288;
- if v_cnt_ac43 > 0 then
- update ac43 set aaz288 = '' where aaz288 = PI_AAZ288;
- end if;
- exception
- when others then
- -- Sqlcode, Sqlerrm
- Po_Fhz := '-1';
- Po_Msg := '过程' || Pkg_Name || v_Prc || '报错,ac01表里没有找到该人员';
- end cancelAaz288;
- /*删除知识库核销的附件内容,否则数据里的不必要的附件会越来越多*/
- procedure deleteZskFile(PI_CAE232 in varchar2,
- po_fhz out varchar2,
- po_msg out varchar2) IS
- v_cae232_cnt number(4);
- v_Prc varchar2(100);
- v_Prcname varchar2(100);
- v_Params varchar2(400);
- begin
- --初始化
- Po_Fhz := '';
- Po_Msg := '成功';
- v_Prc := '.updateIDCard';
- v_Prcname := c_Pkg_Name || v_Prc;
- v_Params := ',传入参数为:PI_CAE232=' || PI_CAE232;
- select count(1)
- into v_cae232_cnt
- from wyl_file a
- where a.cae232 = PI_CAE232;
- if v_cae232_cnt > 0 then
- delete from wyl_file where cae232 = PI_CAE232;
- end if;
- --异常
- exception
- when others then
- Po_Msg := Pkg_Fun.f_Errmsg(v_Prcname, Sqlcode, Sqlerrm, v_Params);
- Po_Fhz := '-1';
- end deleteZskFile;
- /*
- 生成项目明细统计报表数据
- */
- procedure generatexmmx(pi_ksrq in varchar2,
- pi_zzrq in varchar2,
- po_fhz out varchar2,
- po_msg out varchar2) is
- v_count number(3);
- v_tongji fw_xmmx%rowtype;
- cursor cur_fw_xmmx is
- select *
- from fw_xmmx
- where aae008 >= pi_ksrq
- and aae008 <= pi_zzrq;
- cursor cur_jhnywc is
- --计划内完成验证的
- select a.bae010, count(1) num1
- from fw_xmmx a
- where a.aae008 >= pi_ksrq
- and a.aae008 <= pi_zzrq
- and a.aae022 = ''
- and a.aae026 = ''
- and cae011 = ''
- group by a.bae010;
- cursor cur_jhwywc is
- --计划外完成验证的
- select a.bae010, count(1) num1
- from fw_xmmx a
- where a.aae008 >= pi_ksrq
- and a.aae008 <= pi_zzrq
- and a.aae022 = ''
- and a.aae026 = ''
- and cae011 = ''
- group by a.bae010;
- cursor cur_jhnwwc is
- --计划内未完成验证的 3
- select a.bae010, count(1) num2
- from fw_xmmx a
- where a.aae008 >= pi_ksrq
- and a.aae008 <= pi_zzrq
- and a.aae022 = ''
- and a.aae026 is null
- and cae011 <> ''
- and cae011 <> ''
- group by a.bae010;
- cursor cur_jhwwwc is
- --计划外未完成验证的
- select a.bae010, count(1) num2
- from fw_xmmx a
- where a.aae008 >= pi_ksrq
- and a.aae008 <= pi_zzrq
- and a.aae022 = ''
- and a.aae026 is null
- and cae011 <> ''
- and cae011 <> ''
- group by a.bae010;
- cursor cur_jhnywc_gs is
- --计划内完成工时 4
- select a.bae010, sum(a.aae018) jhgs, sum(a.aae019) sjgs
- from fw_xmmx a
- where a.aae008 >= pi_ksrq
- and a.aae008 <= pi_zzrq
- and a.aae022 = ''
- and a.aae026 = ''
- and cae011 = ''
- group by a.bae010;
- cursor cur_jhwywc_gs is
- --计划外完成工时
- select a.bae010, sum(a.aae018) jhgs, sum(a.aae019) sjgs
- from fw_xmmx a
- where a.aae008 >= pi_ksrq
- and a.aae008 <= pi_zzrq
- and a.aae022 = ''
- and a.aae026 = ''
- and cae011 = ''
- group by a.bae010;
- cursor cur_jhnwwc_gs is
- --计划内未完成工时
- select a.bae010, sum(a.aae018) jhgs, sum(a.aae019) sjgs
- from fw_xmmx a
- where a.aae008 >= pi_ksrq
- and a.aae008 <= pi_zzrq
- and a.aae022 = ''
- and a.aae026 is null
- and cae011 <> ''
- and cae011 <> ''
- group by a.bae010;
- cursor cur_jhwwwc_gs is
- --计划外未完成工时
- select a.bae010, sum(a.aae018) jhgs, sum(a.aae019) sjgs
- from fw_xmmx a
- where a.aae008 >= pi_ksrq
- and a.aae008 <= pi_zzrq
- and a.aae022 = ''
- and a.aae026 is null
- and cae011 <> ''
- and cae011 <> ''
- group by a.bae010;
- begin
- po_fhz := '';
- po_msg := '成功';
- delete from fw_xmmx_tongji;
- insert into fw_xmmx_tongji
- (bae010)
- select AAA102 from aa10 where aaa100 = 'BAE010';
- /*循环插入计划内 已经 完成验证的*/
- for v_cur in cur_jhnywc loop
- update fw_xmmx_tongji
- set jhn_ywc = v_cur.num1, ksrq = pi_ksrq, zzrq = pi_zzrq
- where bae010 = v_cur.bae010;
- null;
- end loop;
- /*循环插入计划外 已经 完成验证的*/
- for v_cur_ in cur_jhwywc loop
- update fw_xmmx_tongji
- set jhw_ywc = v_cur_.num1, ksrq = pi_ksrq, zzrq = pi_zzrq
- where bae010 = v_cur_.bae010;
- null;
- end loop;
- /*循环更新计划内 未 完成验证的*/
- for v_cur2 in cur_jhnwwc loop
- update fw_xmmx_tongji k
- set jhn_wwc = v_cur2.num2
- where k.bae010 = v_cur2.bae010;
- null;
- end loop;
- /*循环更新计划外 未 完成验证的*/
- for v_cur2_ in cur_jhwwwc loop
- update fw_xmmx_tongji k
- set jhw_wwc = v_cur2_.num2
- where k.bae010 = v_cur2_.bae010;
- null;
- end loop;
- /*计划内完成工时 3 */
- for v_cur3 in cur_jhnywc_gs loop
- /*update fw_xmmx_tongji k set jhn_ywcgs= v_cur3.jhgs,jhn_ where k.bae010 = v_cur2.bae010;*/
- update fw_xmmx_tongji k
- set jhn_ywcgs = v_cur3.jhgs, jhn_ywcgs_sj = v_cur3.sjgs
- where k.bae010 = v_cur3.bae010;
- null;
- end loop;
- /*计划外完成工时 3 */
- for v_cur3_ in cur_jhwywc_gs loop
- /*update fw_xmmx_tongji k set jhn_ywcgs= v_cur3.jhgs,jhn_ where k.bae010 = v_cur2.bae010;*/
- update fw_xmmx_tongji k
- set jhw_ywcgs = v_cur3_.jhgs, jhw_ywcgs_sj = v_cur3_.sjgs
- where k.bae010 = v_cur3_.bae010;
- null;
- end loop;
- /*计划内未完成工时 4*/
- for v_cur4 in cur_jhnwwc_gs loop
- update fw_xmmx_tongji k
- set jhn_ywcgs = v_cur4.jhgs, jhn_ywcgs_sj = v_cur4.sjgs
- where k.bae010 = v_cur4.bae010;
- null;
- end loop;
- /*计划外未完成工时 4*/
- for v_cur4_ in cur_jhwwwc_gs loop
- update fw_xmmx_tongji k
- set jhw_ywcgs = v_cur4_.jhgs, jhw_ywcgs_sj = v_cur4_.sjgs
- where k.bae010 = v_cur4_.bae010;
- null;
- end loop;
- null;
- end;
- /*
- 修正sic86 的单位编号,以sic84.aab001为依据, 用于pkg_zhgl.Ylgrzh_Cxtj,以弥补重新统计过程的缺陷
- add by weiyongle 20160506
- */
- procedure rebuild_sic86(pi_aac001 in varchar2,
- po_fhz out varchar2,
- po_msg out varchar2) is
- v_cae121 sic84.aae002%type;
- v_cnt_sic86 number(2);
- v_cnt_ac20 number(2);
- v_aab001 sic86.aab001%type;
- v_aae041 ac20.aae041%type;
- v_ksny sic86.aae001%type;
- v_zzny sic86.aae001%type;
- cursor c_aae002_sic84 is
- select max(cae121) cae121, aab001
- from sic84
- where aac001 = pi_aac001
- group by substr(aae002, 1, 4), aab001
- order by cae121;
- begin
- --初始化参数
- po_fhz := '-1';
- po_msg := '成功';
- for v_cur in c_aae002_sic84 loop
- v_cae121 := v_cur.cae121;
- select count(1)
- into v_cnt_sic86
- from sic86
- where aac001 = pi_aac001
- and aae001 = substr(v_cae121, 1, 4);
- begin
- if v_cnt_sic86 != 1 then
- po_fhz := '-1';
- po_msg := '该人员' || pi_aac001 || '在 ' || substr(v_cae121, 1, 4) ||
- '年度有多条个人养老账户,请核查!';
- return;
- end if;
- /*update sic86
- set aab001 = v_cur.aab001
- where aac001 = pi_aac001
- and aae001 = substr(v_aae002, 1, 4);*/
- update sic86
- set aab001 =
- (select aab001
- from sic84
- where aac001 = pi_aac001
- /* 必须按照cae121来 判断,而不能用 aae002来判断 ,否则有些情况会出问题 */
- and cae121 = v_cur.cae121)
- where aac001 = pi_aac001
- and aae001 = substr(v_cae121, 1, 4);
- exception
- when others then
- po_fhz := '-2';
- po_msg := '更新人员' || pi_aac001 || ',' || substr(v_cae121, 1, 4) ||
- '年度的养老账户时发生系统错误!';
- return;
- end;
- end loop;
- /*select min(substr(aae041,1,4)) from ac20 where aac001 = 1000194637;-- ksny
- select min(substr(cae121,1,4))-1 from sic84 where aac001 = 1000194637; -- zzny */
- -- add by weiyongle 20160527
- begin
- select min(substr(aae041, 1, 4))
- into v_ksny
- from ac20
- where aac001 = pi_aac001;
- select min(substr(cae121, 1, 4))
- into v_zzny
- from sic84
- where aac001 = pi_aac001;
- /*
- 如果ac20的最小年份小于sic84的最小年份,
- 那么从ac20的最小年份到sic84最小年份的上一年开始循环
- */
- if v_ksny < v_zzny then
- v_zzny := v_zzny - 1;
- for i in v_ksny .. v_zzny loop
- begin
- select max(aae041)
- into v_aae041
- from ac20
- where aac001 = pi_aac001
- and substr(aae041, 1, 4) = i;
- select count(1)
- into v_cnt_ac20
- from ac20
- where aac001 = pi_aac001
- and aae041 = v_aae041;
- /*如果最小年份有多条开始月份相同的的ac20记录,那么报错*/
- if v_cnt_ac20 > 1 then
- po_fhz := '-2';
- po_msg := '改人员的养老历史账户在' || i || '年度有多条以' || v_aae041 ||
- '作为开始年月的记录,不符合常理,请先到历史维护模块进行数据修正';
- return;
- else
- select aab001
- into v_aab001
- from ac20 b
- where aac001 = pi_aac001
- and b.aae041 = v_aae041;
- end if;
- end;
- /*update sic86
- set aab001 =
- (select aab001
- from ac20 b
- where aac001 = pi_aac001 and substr(b.aae041, 1, 4) = v_ksny)
- where aac001 = pi_aac001
- and aae001 = i;*/
- update sic86
- set aab001 = v_aab001
- where aac001 = pi_aac001
- and aae001 = i;
- end loop;
- end if;
- end;
- end rebuild_sic86;
- procedure rebuild_ab07(pi_aab001 in varchar2,
- pi_ksny in varchar2,
- pi_zzny in varchar2,
- pi_aae140 in varchar2,
- po_fhz out varchar2,
- po_msg out varchar2) is
- cursor c_ac43 is
- select *
- from ac43
- where aab001 = pi_aab001
- and aaz288 is null;
- begin
- /*for i in ksny .. zzny loop
- null;
- pkg_yuejie.dwzjjh_cxtj_aae140(pi_aab001,
- pi_aae002 => :pi_aae002,
- pi_aae140 => :pi_aae140,
- po_fhz => :po_fhz,
- po_msg => :po_msg);
- end loop;*/
- --初始化参数
- po_fhz := '';
- po_msg := '成功';
- /*for v_cur in c_ac43 loop
- pkg_yuejie.dwzjjh_cxtj_aae140(pi_aab001,
- v_cur.aae002,
- '110',
- po_fhz,
- po_msg);
- end loop;*/
- for i in pi_ksny .. pi_zzny loop
- pkg_yuejie.dwzjjh_cxtj_aae140(pi_aab001,
- i,
- pi_aae140,
- po_fhz,
- po_msg);
- end loop;
- exception
- when others then
- po_fhz := '-1';
- po_msg := '失败';
- return;
- end rebuild_ab07;
- /*Pkg_Ryhb_Pl_New
- --批量合并,初始数据生成
- Procedure Plhb_Start(Pi_Bae001 In Varchar2,
- Pi_Aab001 In Number,
- Pi_Jbr In Varchar2, --- 10000641
- Po_Fhz Out Varchar2,
- Po_Msg Out Varchar2)
- */
- procedure generate_plhb_data(pi_bae001 in varchar2,
- po_fhz out varchar2,
- po_msg out varchar2) is
- cursor cur_dwxx is
- select * from ae01 where bae001 = pi_bae001;
- begin
- -- 初始化
- po_msg := '成功';
- po_fhz := '';
- for v_cur in cur_dwxx loop
- Pkg_Ryhb_Pl_New.Plhb_Start(pi_bae001,
- v_cur.aab001,
- '',
- po_fhz,
- po_msg);
- end loop;
- exception
- when others then
- po_msg := '失败';
- po_fhz := '-1';
- end;
- /*查询知识库数据*/
- procedure queryZSK(PI_AAE906 in varchar2,
- PO_AAE202 out varchar2,
- PO_AAE008 out varchar2,
- po_fhz out varchar2,
- po_msg out varchar2) is
- v_cnt number(2);
- cursor c_zsk is
- select * from fw_zsk where aae906 = pi_aae906;
- begin
- -- 初始化参数
- po_fhz := '';
- po_msg := '获取数据成功!';
- select count(1) into v_cnt from fw_zsk where aae906 = pi_aae906;
- if v_cnt = 1 then
- for v_zsk in c_zsk loop
- po_aae202 := v_zsk.aae202;
- po_aae008 := v_zsk.aae008;
- end loop;
- else
- po_fhz := '-1';
- po_msg := '_9,返回值过多';
- end if;
- end queryZSK;
- /*
- 生成失地农民汇总数据
- by weiyongel 20160519
- */
- procedure generate_sdnmhzsj(PI_BAE001 in varchar2,
- po_fhz out varchar2,
- po_msg out varchar2) is
- v_aab383 ic51.aab383%type;
- v_aic452 ic51.aic452%type;
- v_aic453 ic51.aic453%type;
- v_rs ic5152_hzb.rs%type;
- v_cnt number(2);
- cursor c_Ic5152_Temp is
- select *
- from Ic5152_Temp
- where bae001 = pi_bae001
- and imp_flag = ''
- and zfbtfs <> null;
- begin
- -- 初始化参数
- po_fhz := '';
- po_msg := '数据汇总成功!';
- /*for v_c_Ic5152_Temp in c_Ic5152_Temp loop
- null;
- end loop;*/
- begin
- select count(1) into v_cnt from ic5152_hzb where bae001 = pi_bae001;
- /*如果大于0,那么就先清除这个汇总表*/
- if v_cnt > 0 then
- delete from ic5152_hzb where bae001 = pi_bae001;
- end if;
- end;
- select sum(nvl(aab383, 0))
- into v_aab383
- from Ic5152_Temp
- where bae001 = pi_bae001
- and imp_flag = ''
- and zfbtfs is not null;
- select count(distinct(aac002))
- into v_rs
- from Ic5152_Temp
- where bae001 = pi_bae001
- and imp_flag = ''
- and zfbtfs is not null;
- select sum(nvl(aic452, 0))
- into v_aic452
- from Ic5152_Temp
- where bae001 = pi_bae001
- and imp_flag = ''
- and zfbtfs is not null;
- select sum(nvl(aic453, 0))
- into v_aic453
- from Ic5152_Temp
- where bae001 = pi_bae001
- and imp_flag = ''
- and zfbtfs is not null;
- insert into ic5152_hzb
- (bae001, rs, aab383, aic452, aic453)
- values
- (PI_BAE001, v_rs, v_aab383, v_aic452, v_aic453);
- -- 调用生成清理数据的过程
- generate_sdnmqlsj(PI_BAE001, po_fhz, po_msg);
- exception
- when others then
- po_fhz := '-1';
- po_msg := 'pkg_weiyl.generate_sdnmhzsj 数据汇总失败!';
- return;
- end generate_sdnmhzsj;
- /*
- 生成失地农民清理数据
- by weiyongel 20160519
- */
- procedure generate_sdnmqlsj(PI_BAE001 in varchar2,
- po_fhz out varchar2,
- po_msg out varchar2) is
- v_aab383 ic51.aab383%type;
- v_aic452 ic51.aic452%type;
- v_aic453 ic51.aic453%type;
- v_rs ic5152_qlb .rs%type;
- v_cnt number(2);
- cursor c_Ic5152_Temp is
- select sum(nvl(a.aab383, 0)) aab383,
- sum(nvl(a.aic453, 0)) aic453,
- sum(nvl(a.aic452, 0)) aic452,
- count(distinct(a.aac002)) rs,
- a.aae001 aae001
- from Ic5152_Temp a
- where bae001 = PI_BAE001
- and imp_flag = ''
- and zfbtfs is not null
- group by aae001;
- begin
- -- 初始化参数
- po_fhz := '';
- po_msg := '生成失地农民清理数据成功!';
- begin
- select count(1) into v_cnt from ic5152_qlb where bae001 = pi_bae001;
- /*如果大于0,那么就先删除这个汇总表*/
- if v_cnt > 0 then
- delete from ic5152_qlb where bae001 = pi_bae001;
- end if;
- end;
- for v_c_Ic5152_Temp in c_Ic5152_Temp loop
- /*插入清理数据表 ,用于报表数据提取 */
- insert into ic5152_qlb
- (bae001, aae001, rs, aab383, aic452, aic453)
- values
- (PI_BAE001,
- v_c_Ic5152_Temp.aae001,
- v_c_Ic5152_Temp.rs,
- v_c_Ic5152_Temp.Aab383,
- v_c_Ic5152_Temp.Aic452,
- v_c_Ic5152_Temp.Aic453);
- null;
- end loop;
- exception
- when others then
- po_fhz := '-1';
- po_msg := 'pkg_weiyl.generate_sdnmhzsj 数据汇总失败!';
- return;
- end generate_sdnmqlsj;
- /*生成失地农民数据清理后的变化字段,用于查询失地农民数据清理模块*/
- procedure generate_sdnmdatachange(PI_AAC001 in varchar2,
- PI_AAZ288 in varchar2,
- PO_FHZ out varchar2,
- PO_MSG out varchar2) is
- cursor c_ic51_bf is
- select *
- from ic51_bf
- where aac001 = pi_aac001
- and aaz288 = pi_aaz288;
- cursor c_ic51 is
- select *
- from ic51
- where aac001 = pi_aac001
- and aaz288 = pi_aaz288;
- v_cnt_bf number(2);
- v_aic443_tmp ic51_bf.aic443%type;
- begin
- /*--正常或暂停参保并且是老系统导入的可以修改个人缴费金额
- Update Ic51
- Set Aic443 = v_Ic5152_Temp.Aic443,
- Aic444 = v_Ic5152_Temp.Aic444,
- Aic020 = v_Ic5152_Temp.Aic020,
- Aab383 = v_Ic5152_Temp.Aab383,
- Aic446 = v_Ic5152_Temp.Aic446,
- Aic452 = v_Ic5152_Temp.Aic452,
- Aic448 = v_Ic5152_Temp.Aic448,
- Aic453 = v_Ic5152_Temp.Aic453,
- Aic021 = v_Ic5152_Temp.Aic021,
- Aaa041 = v_Ic5152_Temp.Aaa041,
- Aae002 = v_Ic5152_Temp.Aae002
- Where Aac001 = v_Aac001
- And Aaz288 = v_Ic5152_Temp.Aaz288
- And Bce094 = '1'
- And Aae016 = '1';*/
- -- 初始化参数
- po_fhz := '';
- po_msg := '生成变更记录数据成功!';
- -- 1. 先做判断,如果已经生成了相应的变更记录,那么就先删除相应的变更记录表,然后重新生成最新的数据
- begin
- select count(1)
- into v_cnt_bf
- from ic5152_bg
- where aac001 = pi_aac001
- and aaz288 = pi_aaz288;
- if v_cnt_bf > 0 then
- delete from ic5152_bg
- where aaz288 = pi_aaz288
- and aac001 = pi_aac001;
- end if;
- end;
- -- 2. 生成最新的变更记录表
- for v_bf in c_ic51_bf loop
- begin
- -- 1 先插入aaz288,aac001,aae001,aae002等信息
- insert into ic5152_bg
- (aaz288, bae001, aac001, aae002, aae001)
- values
- (PI_AAZ288, v_bf.bae001, v_bf.aac001, v_bf.aae002, v_bf.aae001);
- for v_ic51 in c_ic51 loop
- -- a. 先直接更新变更记录表
- update ic5152_bg a
- set a.aic020 = v_ic51.aic020,
- a.aic020_ = v_bf.aic020,
- a.aic443 = v_ic51.aic443,
- a.aic443_ = v_bf.aic443,
- a.aic444 = v_ic51.aic444,
- a.aic444_ = v_bf.aic444,
- a.aab383 = v_ic51.aab383,
- a.aab383_ = v_bf.aab383,
- a.aic446 = v_ic51.aic446,
- a.aic446_ = v_bf.aic446,
- a.aic452 = v_ic51.aic452,
- a.aic452_ = v_bf.aic452,
- a.aic448 = v_ic51.aic448,
- a.aic448_ = v_bf.aic448,
- a.aic453 = v_ic51.aic453,
- a.aic453_ = v_bf.aic453,
- a.aic021 = v_ic51.aic021,
- a.aic021_ = v_bf.aic021,
- a.aaa041 = v_ic51.aaa041,
- a.aaa041_ = v_bf.aaa041
- where aaz288 = pi_aaz288;
- if v_ic51.aic443 != v_bf.aic443 then
- update ic5152_bg
- set aic443 = v_ic51.aic443, aic443_ = v_bf.aic443
- where aaz288 = pi_aaz288;
- end if;
- if v_ic51.aic444 != v_bf.aic444 then
- update ic5152_bg
- set aic444 = v_ic51.aic444, aic444_ = v_bf.aic444
- where aaz288 = pi_aaz288;
- end if;
- if v_ic51.aab383 != v_bf.aab383 then
- update ic5152_bg
- set aab383 = v_ic51.aab383, aab383_ = v_bf.aab383
- where aaz288 = pi_aaz288;
- end if;
- /*if v_ic51.aic443 != v_bf.aic443 then
- update ic5152_bg aic443,aic443_ set v_ic51.aic433,v_bf.aic443;
- end if;
- if v_ic51.aic443 != v_bf.aic443 then
- update ic5152_bg aic443,aic443_ set v_ic51.aic433,v_bf.aic443;
- end if;
- if v_ic51.aic443 != v_bf.aic443 then
- update ic5152_bg aic443,aic443_ set v_ic51.aic433,v_bf.aic443;
- end if;*/
- end loop;
- exception
- when others then
- po_fhz := '-11';
- po_msg := '生成变更记录数据失败!';
- end;
- end loop;
- exception
- when others then
- po_fhz := '-1';
- po_msg := '生成变更记录数据失败!';
- end generate_sdnmdatachange;
- /*检查ac35时间 ,增减员时用*/
- procedure checkAC35Tim(PI_AAC002 in varchar2,
- pi_aab999 in varchar2,
- Po_AAE042 OUT varchar2,
- PO_FHZ out varchar2,
- PO_MSG out varchar2) is
- v_cnt number(3);
- v_cnt2 number(12);
- v_cnt3 number(12);
- v_aac001 ac01.aac001%type;
- v_aae042 ac35.aae042%type;
- n_aab001 ae01.aab001%type;
- begin
- --初始化
- -- 初始化参数
- po_fhz := '';
- po_msg := 'success';
- select count(1) into v_cnt from ac01 where aac002 = pi_aac002;
- if v_cnt > 0 then
- select aab001 into n_aab001 from ae01 where aab999 = pi_aab999;
- select nvl(max(aae042), '')
- into Po_AAE042
- from ac35
- where aac001 in (select aac001 from ac01 where aac002 = pi_aac002)
- and aab001 = n_aab001;
- else
- Po_AAE042 := '';
- end if;
- exception
- when others then
- po_fhz := '-1';
- po_msg := '获取ac35.aae042出错,success';
- end checkAC35Tim;
- /* 重新统计ac43 aae002 ,20160526 */
- procedure cxtj_ac43(PI_AAB001 in varchar2,
- PO_FHZ out varchar2,
- PO_MSG out varchar2) is
- v_cnt number(5);
- v_cae122 ac43.cae122%type;
- v_aae002 ac43.aae002%type;
- cursor c_ac43 is
- select *
- from ac43
- where aab001 = pi_aab001
- and aaz288 is null;
- begin
- --初始化
- -- 初始化参数
- po_fhz := '';
- po_msg := 'success';
- begin
- select count(1)
- into v_cnt
- from ac43
- where aab001 = pi_aab001
- and aaz288 is null;
- if v_cnt > 0 then
- for v_cur_ac43 in c_ac43 loop
- /*if v_cur_ac43.aae002 != v_cur_ac43.cae122 then
- update ac43
- set aae002 = v_cur_ac43.cae122
- where aab001 = pi_aab001
- and aaz288 is null
- and cae122 = v_cur_ac43.cae122;
- end if;*/
- update ac43
- set aae002 = v_cur_ac43.cae122
- where aab001 = pi_aab001
- and aaz288 is null
- and cae122 = v_cur_ac43.cae122;
- end loop;
- end if;
- end;
- end cxtj_ac43;
- procedure getAAC027(PI_AAC002 in varchar2,
- PO_AAC027 OUT varchar2,
- PO_FHZ out varchar2,
- PO_MSG out varchar2) IS
- v_cnt number(1);
- v_aac027 ac01.aac027%type;
- begin
- --初始化
- -- 初始化参数
- po_fhz := '';
- po_msg := 'success';
- select count(1) into v_cnt from ac01 where aac002 = pi_aac002;
- if v_cnt > 0 then
- select aac027 into v_aac027 from ac01 where aac002 = pi_aac002;
- PO_AAC027 := v_aac027;
- end if;
- exception
- when others then
- po_fhz := '-1';
- po_msg := 'error';
- end getAAC027;
- /* for test ,20160530 */
- procedure myInsert(PI_AAC002 in varchar2,
- PO_FHZ out varchar2,
- PO_MSG out varchar2) is
- begin
- --初始化
- -- 初始化参数
- po_fhz := '';
- po_msg := 'success';
- insert into xzl_one (aac002) values (pi_aac002);
- exception
- when others then
- po_fhz := '-1';
- po_msg := 'error';
- end myInsert;
- /*统计 社会保险参保情况查询 */
- procedure tongji_shbx_old(PI_AAC001 in varchar2,
- PO_FHZ out varchar2,
- PO_MSG out varchar2) is
- v_cnt number(2);
- v_cic818 T_BXGX_SHBXCBQKCXJG_WYL.Cic818%type;
- v_cic819 T_BXGX_SHBXCBQKCXJG_WYL.Cic819%type;
- v_aae042_ac20 ac20.aae042%type;
- v_aae041_ac20 ac20.aae041%type;
- v_aae041_sac14 sac14.aae041%type;
- v_aae042_sac14 sac14.aae042%type;
- v_yf number(2);
- v_Prc Varchar2(20);
- v_Prcname Varchar2(200);
- v_Params Varchar2(500);
- cursor cur_t is
- select count(1) cnt, aae001
- from T_BXGX_SHBXCBQKCXJG_WYL
- where aac001 = pi_aac001
- group by aae001
- order by aae001;
- begin
- -- 初始化返回值
- Po_Fhz := '';
- Po_Msg := '';
- v_Prc := '.tongji_shbx';
- v_Prcname := c_Pkg_Name || v_Prc;
- v_Params := ',传入参数为:pi_aac001=' || Pi_Aac001;
- -- 自建表 T_BXGX_SHBXCBQKCXJG_WYL 1000745288
- /*
- 从这里取值,可以直接复制到 表 T_BXGX_SHBXCBQKCXJG_WYL 中
- select bae001,
- aae001,
- aac001,
- cac002,
- aac003,
- aac004,
- aac002,
- csrq,
- cgrq,
- aae200,
- aab999,
- aab004,
- cic818,
- sum(cic819) cic819,
- aic058,
- aic074,
- aic072,
- aic075,
- aic076,
- aic077,
- aic078,
- aic079,
- aae087,
- jfsm,
- cbzt,
- ccjfrq,
- zmjfrq,
- dqjfgz
- from v_bxgx_shbxcbqkcxjg_xgy_
- where aac001 = 1000745288
- group by bae001,
- aae001,
- aac001,
- cac002,
- aac003,
- aac004,
- aac002,
- csrq,
- cgrq,
- aae200,
- aab999,
- aab004,
- cic818,
- aic058,
- aic074,
- aic072,
- aic075,
- aic076,
- aic077,
- aic078,
- aic079,
- aae087,
- jfsm,
- cbzt,
- ccjfrq,
- zmjfrq,
- dqjfgz order by aae001;*/
- -- 清空临时表
- delete from T_BXGX_SHBXCBQKCXJG_WYL where aac001 = pi_aac001;
- delete from T_BXGX_SHBXCBQKCXJG_WYL_ where aac001 = pi_aac001;
- /*插入数据*/
- insert into T_BXGX_SHBXCBQKCXJG_WYL
- select bae001,
- aac001,
- cac002,
- aac003,
- aac004,
- aac002,
- csrq,
- cgrq,
- aae200,
- aab999,
- aab004,
- aae001,
- cic818,
- sum(nvl(cic819, 0)) cic819,
- aic058,
- aic074,
- aic072,
- aic075,
- aic076,
- aic077,
- aic078,
- aic079,
- aae087,
- jfsm,
- cbzt,
- ccjfrq,
- zmjfrq,
- dqjfgz
- from v_bxgx_shbxcbqkcxjg_xgy_
- where aac001 = pi_aac001
- group by bae001,
- aae001,
- aac001,
- cac002,
- aac003,
- aac004,
- aac002,
- csrq,
- cgrq,
- aae200,
- aab999,
- aab004,
- cic818,
- aic058,
- aic074,
- aic072,
- aic075,
- aic076,
- aic077,
- aic078,
- aic079,
- aae087,
- jfsm,
- cbzt,
- ccjfrq,
- zmjfrq,
- dqjfgz
- order by aae001;
- insert into T_BXGX_SHBXCBQKCXJG_WYL_
- select * from T_BXGX_SHBXCBQKCXJG_WYL where aac001 = pi_aac001;
- -- 判断是否有多条,有多条就算是有转入的
- -- select count(1),aae001 into v_cnt from T_BXGX_SHBXCBQKCXJG_WYL where aac001 = pi_aac001 group by aae001 order by aae001;
- for v_cur in cur_t loop
- if v_cur.cnt > 1 then
- select sum(nvl(cic818, 0)) cic818_hj
- into v_cic818
- from T_BXGX_SHBXCBQKCXJG_WYL
- where aae001 = v_cur.aae001;
- select sum(nvl(cic819, 0)) cic819_hj
- into v_cic819
- from T_BXGX_SHBXCBQKCXJG_WYL
- where aae001 = v_cur.aae001;
- update T_BXGX_SHBXCBQKCXJG_WYL_ a
- set a.cic818 = v_cic818
- where aac001 = pi_aac001
- and aae001 = v_cur.aae001;
- -- 因为有两条,一条为转入,一条为本地,所以要 删除一条,然后更新
- delete from T_BXGX_SHBXCBQKCXJG_WYL_
- where aac001 = pi_aac001
- and aae001 = v_cur.aae001
- and aae087 = '';
- update T_BXGX_SHBXCBQKCXJG_WYL_ a
- set a.cic819 = v_cic819
- where aac001 = pi_aac001
- and aae001 = v_cur.aae001;
- end if;
- -- 修正 转入的月份
- select aae042
- into v_aae042_ac20
- from ac20
- where aac001 = pi_aac001
- and aae140 = ''
- and substr(aae041, 1, 4) = v_cur.aae001;
- select aae041
- into v_aae041_ac20
- from ac20
- where aac001 = pi_aac001
- and aae140 = ''
- and substr(aae041, 1, 4) = v_cur.aae001;
- select aae042
- into v_aae042_sac14
- from sac14
- where aac001 = pi_aac001
- and aae140 = ''
- and substr(aae041, 1, 4) = v_cur.aae001;
- select aae041
- into v_aae041_sac14
- from sac14
- where aac001 = pi_aac001
- and aae140 = ''
- and substr(aae041, 1, 4) = v_cur.aae001;
- if v_aae042_ac20 <= v_aae041_sac14 or v_aae042_sac14 <= v_aae041_ac20 then
- v_yf := v_aae042_ac20 - v_aae041_ac20 + 1 + v_aae042_sac14 -
- v_aae041_sac14 + 1;
- -- 有重合的情况
- Elsif v_aae042_ac20 > v_aae041_sac14 and
- v_aae042_ac20 < v_aae042_sac14 and
- v_aae041_ac20 <= v_aae041_sac14 Then
- v_yf := v_aae042_ac20 - v_aae041_ac20 + 1 + v_aae042_sac14 -
- v_aae041_sac14 + 1 - (v_aae042_ac20 - v_aae041_sac14 + 1);
- Elsif v_aae042_ac20 > v_aae041_sac14 and
- v_aae042_ac20 < v_aae042_sac14 and
- v_aae041_ac20 >= v_aae041_sac14 Then
- v_yf := v_aae042_ac20 - v_aae041_ac20 + 1 + v_aae042_sac14 -
- v_aae041_sac14 + 1 - (v_aae042_ac20 - v_aae041_ac20 + 1);
- Elsif v_aae042_ac20 > v_aae041_sac14 and
- v_aae042_ac20 < v_aae042_sac14 and
- v_aae041_ac20 >= v_aae041_sac14 Then
- v_yf := v_aae042_ac20 - v_aae041_ac20 + 1 + v_aae042_sac14 -
- v_aae041_sac14 + 1 - (v_aae042_ac20 - v_aae041_ac20 + 1);
- Elsif v_aae042_ac20 > v_aae041_sac14 and
- v_aae042_ac20 >= v_aae042_sac14 and
- v_aae041_ac20 <= v_aae041_sac14 Then
- v_yf := v_aae042_ac20 - v_aae041_ac20 + 1;
- Elsif v_aae042_ac20 >= v_aae042_sac14 and
- v_aae041_ac20 > v_aae041_sac14 Then
- v_yf := v_aae042_ac20 - v_aae041_ac20 + 1 +
- (v_aae042_sac14 - v_aae041_sac14 + 1) -
- (v_aae041_ac20 - v_aae041_sac14 + 1);
- end if;
- update T_BXGX_SHBXCBQKCXJG_WYL_ a
- set a.cic818 = v_yf
- where aac001 = pi_aac001
- and aae001 = v_cur.aae001;
- end loop;
- exception
- when others then
- Po_Fhz := v_Prcname || '_91,重新统计月份出错';
- Po_Msg := Pkg_Fun.f_Errmsg(v_Prcname, Sqlcode, Sqlerrm, v_Params);
- end tongji_shbx_old;
- /*
- 20160801 修改
- 统计 社会保险参保情况查询 ,对应于 眉山市的养老对账单打印 模块 ,卫永乐*/
- procedure tongji_shbx(PI_AAC001 in varchar2,
- PO_FHZ out varchar2,
- PO_MSG out varchar2) is
- v_cnt number(2);
- v_cnt_sd number(2);
- v_cic818 T_BXGX_SHBXCBQKCXJG_WYL.Cic818%type;
- v_cic818_sd T_BXGX_SHBXCBQKCXJG_WYL.Cic818%type;
- v_cic819 T_BXGX_SHBXCBQKCXJG_WYL.Cic819%type;
- v_aae042_ac20 ac20.aae042%type;
- v_aae041_ac20 ac20.aae041%type;
- v_aae041_sac14 sac14.aae041%type;
- v_aae042_sac14 sac14.aae042%type;
- v_aae180_sac14 sac14.aae180%type;
- v_yf number(2);
- v_Prc Varchar2(20);
- v_Prcname Varchar2(200);
- v_Params Varchar2(500);
- cursor cur_t is
- select count(1) cnt, aae001
- from T_BXGX_SHBXCBQKCXJG_WYL
- where aac001 = pi_aac001
- and aae087 in ('', '')
- group by aae001
- order by aae001;
- begin
- -- 初始化返回值
- Po_Fhz := '';
- Po_Msg := '';
- v_Prc := '.tongji_shbx';
- v_Prcname := c_Pkg_Name || v_Prc;
- v_Params := ',传入参数为:pi_aac001=' || Pi_Aac001;
- -- 自建表 T_BXGX_SHBXCBQKCXJG_WYL 1000745288
- /*
- 从这里取值,可以直接复制到 表 T_BXGX_SHBXCBQKCXJG_WYL 中
- select bae001,
- aae001,
- aac001,
- cac002,
- aac003,
- aac004,
- aac002,
- csrq,
- cgrq,
- aae200,
- aab999,
- aab004,
- cic818,
- sum(cic819) cic819,
- aic058,
- aic074,
- aic072,
- aic075,
- aic076,
- aic077,
- aic078,
- aic079,
- aae087,
- jfsm,
- cbzt,
- ccjfrq,
- zmjfrq,
- dqjfgz
- from v_bxgx_shbxcbqkcxjg_xgy_
- where aac001 = 1000745288
- group by bae001,
- aae001,
- aac001,
- cac002,
- aac003,
- aac004,
- aac002,
- csrq,
- cgrq,
- aae200,
- aab999,
- aab004,
- cic818,
- aic058,
- aic074,
- aic072,
- aic075,
- aic076,
- aic077,
- aic078,
- aic079,
- aae087,
- jfsm,
- cbzt,
- ccjfrq,
- zmjfrq,
- dqjfgz order by aae001;*/
- -- 清空临时表
- delete from T_BXGX_SHBXCBQKCXJG_WYL where aac001 = pi_aac001;
- delete from T_BXGX_SHBXCBQKCXJG_WYL_ where aac001 = pi_aac001;
- /*插入数据*/
- insert into T_BXGX_SHBXCBQKCXJG_WYL
- select bae001,
- aac001,
- cac002,
- aac003,
- aac004,
- aac002,
- csrq,
- cgrq,
- aae200,
- aab999,
- aab004,
- aae001,
- cic818,
- sum(nvl(cic819, 0)) cic819,
- aic058,
- aic074,
- aic072,
- aic075,
- aic076,
- aic077,
- aic078,
- aic079,
- aae087,
- jfsm,
- cbzt,
- ccjfrq,
- zmjfrq,
- dqjfgz
- from v_bxgx_shbxcbqkcxjg_xgy_
- where aac001 = pi_aac001
- group by bae001,
- aae001,
- aac001,
- cac002,
- aac003,
- aac004,
- aac002,
- csrq,
- cgrq,
- aae200,
- aab999,
- aab004,
- cic818,
- aic058,
- aic074,
- aic072,
- aic075,
- aic076,
- aic077,
- aic078,
- aic079,
- aae087,
- jfsm,
- cbzt,
- ccjfrq,
- zmjfrq,
- dqjfgz
- order by aae001;
- insert into T_BXGX_SHBXCBQKCXJG_WYL_
- select * from T_BXGX_SHBXCBQKCXJG_WYL where aac001 = pi_aac001;
- -- 判断是否有多条,有多条就算是有转入的
- -- select count(1),aae001 into v_cnt from T_BXGX_SHBXCBQKCXJG_WYL where aac001 = pi_aac001 group by aae001 order by aae001;
- for v_cur in cur_t loop
- if v_cur.cnt > 1 then
- select sum(nvl(cic818, 0)) cic818_hj
- into v_cic818
- from T_BXGX_SHBXCBQKCXJG_WYL
- -- altered by weiyongle
- where aae001 = v_cur.aae001
- and aac001 = pi_aac001;
- select sum(nvl(cic819, 0)) cic819_hj
- into v_cic819
- from T_BXGX_SHBXCBQKCXJG_WYL
- -- altered by weiyongle 20160707
- where aae001 = v_cur.aae001
- and aac001 = pi_aac001;
- update T_BXGX_SHBXCBQKCXJG_WYL_ a
- set a.cic818 = v_cic818
- where aac001 = pi_aac001
- and aae001 = v_cur.aae001;
- -- 因为有两条,一条为转入,一条为本地,所以要 删除一条,然后更新
- delete from T_BXGX_SHBXCBQKCXJG_WYL_
- where aac001 = pi_aac001
- and aae001 = v_cur.aae001
- and aae087 = '';
- update T_BXGX_SHBXCBQKCXJG_WYL_ a
- set a.cic819 = v_cic819
- where aac001 = pi_aac001
- and aae001 = v_cur.aae001;
- -- 修正 转入的月份
- select max(aae042)
- into v_aae042_ac20
- from ac20
- where aac001 = pi_aac001
- and aae140 = ''
- and substr(aae041, 1, 4) = v_cur.aae001
- /*and aac402 = '0';*/
- and aac402 in ('', '');
- select min(aae041)
- into v_aae041_ac20
- from ac20
- where aac001 = pi_aac001
- and aae140 = ''
- and substr(aae041, 1, 4) = v_cur.aae001
- /*and aac402 = '0';*/
- and aac402 in ('', '');
- select max(aae042)
- into v_aae042_sac14
- from sac14
- where aac001 = pi_aac001
- and aae140 = ''
- and substr(aae041, 1, 4) = v_cur.aae001;
- select min(aae041)
- into v_aae041_sac14
- from sac14
- where aac001 = pi_aac001
- and aae140 = ''
- and substr(aae041, 1, 4) = v_cur.aae001;
- -- 20160801 增加 sac14.aae180为空的 判断
- select nvl(aae180, 0)
- into v_aae180_sac14
- from sac14
- where aac001 = pi_aac001
- and aae140 = ''
- and substr(aae041, 1, 4) = v_cur.aae001;
- begin
- /* add by weiyongle 20160719
- 初始化v_yf,循环的时候 ,如果不初始化 变量那么在下一次循环的时候变量
- 还会保留上一次的值,导致在这一次的循环的数值不正确*/
- v_yf := 0;
- -- add by weiyongle 20160719 如果某一个变量为空,那么就不执行
- if v_aae042_ac20 = null or v_aae041_sac14 = null or
- v_aae042_ac20 = null or v_aae041_ac20 = null then
- return;
- else
- if v_aae042_ac20 <= v_aae041_sac14 or
- v_aae042_sac14 <= v_aae041_ac20 then
- /*decode((v_aae042_sac14 - v_aae041_sac14 + 1) * nvl(a.aae180, 0),
- 0,
- 0,
- (v_aae042_sac14 - v_aae041_sac14 + 1))
- decode 函数在存储过程中不能使用
- pkg_weiyl.getMonthNum(v_aae041_sac14,v_aae042_sac14,v_aae180_sac14)
- */
- /*v_yf := v_aae042_ac20 - v_aae041_ac20 + 1 + v_aae042_sac14 -
- v_aae041_sac14 + 1;*/
- v_yf := v_aae042_ac20 - v_aae041_ac20 + 1 +
- pkg_weiyl.getMonthNum(v_aae041_sac14,
- v_aae042_sac14,
- v_aae180_sac14);
- -- 有重合的情况
- Elsif v_aae042_ac20 > v_aae041_sac14 and
- v_aae042_ac20 < v_aae042_sac14 and
- v_aae041_ac20 <= v_aae041_sac14 Then
- v_yf := v_aae042_ac20 - v_aae041_ac20 + 1 +
- pkg_weiyl.getMonthNum(v_aae041_sac14,
- v_aae042_sac14,
- v_aae180_sac14) -
- (v_aae042_ac20 - v_aae041_sac14 + 1);
- Elsif v_aae042_ac20 > v_aae041_sac14 and
- v_aae042_ac20 < v_aae042_sac14 and
- v_aae041_ac20 >= v_aae041_sac14 Then
- v_yf := v_aae042_ac20 - v_aae041_ac20 + 1 +
- pkg_weiyl.getMonthNum(v_aae041_sac14,
- v_aae042_sac14,
- v_aae180_sac14) -
- (v_aae042_ac20 - v_aae041_ac20 + 1);
- Elsif v_aae042_ac20 > v_aae041_sac14 and
- v_aae042_ac20 < v_aae042_sac14 and
- v_aae041_ac20 >= v_aae041_sac14 Then
- v_yf := v_aae042_ac20 - v_aae041_ac20 + 1 +
- pkg_weiyl.getMonthNum(v_aae041_sac14,
- v_aae042_sac14,
- v_aae180_sac14) -
- (v_aae042_ac20 - v_aae041_ac20 + 1);
- Elsif v_aae042_ac20 > v_aae041_sac14 and
- v_aae042_ac20 >= v_aae042_sac14 and
- v_aae041_ac20 <= v_aae041_sac14 Then
- v_yf := v_aae042_ac20 - v_aae041_ac20 + 1;
- Elsif v_aae042_ac20 >= v_aae042_sac14 and
- v_aae041_ac20 > v_aae041_sac14 Then
- v_yf := v_aae042_ac20 - v_aae041_ac20 + 1 +
- (pkg_weiyl.getMonthNum(v_aae041_sac14,
- v_aae042_sac14,
- v_aae180_sac14)) -
- (v_aae041_ac20 - v_aae041_sac14 + 1);
- end if;
- end if;
- end;
- -- 增加 失地农民账户类别的判断 add by weiyongle 20160728
- --先清空 变量
- begin
- v_cic818_sd := 0;
- v_cnt_sd := 0;
- select count(aac001)
- into v_cnt_sd
- from sic86
- where aac001 = pi_aac001
- and aae001 = v_cur.aae001
- and aae087 = '';
- if v_cnt_sd > 0 then
- select cic818
- into v_cic818_sd
- from sic86
- where aac001 = pi_aac001
- and aae001 = v_cur.aae001
- and aae087 = '';
- v_yf := v_yf + v_cic818_sd;
- end if;
- end;
- -- 如果大于12,那么就设置为12
- if v_yf > 12 then
- v_yf := 12;
- end if;
- update T_BXGX_SHBXCBQKCXJG_WYL_ a
- set a.cic818 = v_yf
- where aac001 = pi_aac001
- and aae001 = v_cur.aae001;
- update T_BXGX_SHBXCBQKCXJG_WYL_
- set jfsm = cic818
- where aac001 = pi_aac001;
- -- 针对 失地农民账户类别的判断 add by weiyongle 20160728
- begin
- v_cic818_sd := 0;
- v_cnt_sd := 0;
- select count(aac001)
- into v_cnt_sd
- from sic86
- where aac001 = pi_aac001
- and aae001 = v_cur.aae001
- and aae087 = '';
- if v_cnt_sd > 0 then
- delete from T_BXGX_SHBXCBQKCXJG_WYL_ a
- where aac001 = pi_aac001
- and a.aae001 = v_cur.aae001
- and a.aae087 = '';
- end if;
- end;
- end if;
- end loop;
- exception
- when others then
- Po_Fhz := v_Prcname || '_91,重新统计月份出错';
- Po_Msg := Pkg_Fun.f_Errmsg(v_Prcname, Sqlcode, Sqlerrm, v_Params);
- end tongji_shbx;
- /*批量赋权限,我自己的权限放在表 fw_operator2right_wyl_ 中 */
- procedure prc_right(pi_loginid in varchar2,
- pi_loginid_other in varchar2,
- po_fhz out varchar2,
- po_msg out varchar2) is
- v_bae001 fw_operator.bae001%type;
- v_procname varchar2(200);
- v_operid fw_operator.operid%type;
- -- 所有权限
- /*cursor cur_fw_right is
- select * from fw_right;*/
- --赋予相同的权限
- cursor cur_fw_right is
- select *
- from fw_operator2right a
- where a.operid = (select operid
- from fw_operator k
- where k.loginid = pi_loginid_other);
- begin
- v_procname := 'pkg_weiyongle.prc_right';
- po_fhz := '';
- po_msg := v_procname || '赋权成功!';
- select bae001, a.operid
- into v_bae001, v_operid
- from fw_operator a
- where a.loginid = pi_loginid;
- -- 删除
- delete from fw_operator2right a where a.operid = v_operid;
- for v_cur_right in cur_fw_right loop
- /*return;*/
- --增加
- insert into fw_operator2right
- (ID,
- operid,
- RIGHTID,
- AUTHTYPE,
- AAE100,
- VALIDFROM,
- VALIDTO,
- BAE002,
- BAE004)
- values
- (seq_fw_operator2right.nextval,
- v_operid,
- v_cur_right.rightid,
- '',
- v_cur_right.aae100,
- 20160522161615,
- 20160712160146,
- '',
- '');
- end loop;
- EXCEPTION
- WHEN OTHERS THEN
- po_fhz := '_999';
- po_msg := '增加权限失败,sqlerrm:' || sqlerrm;
- return;
- end prc_right;
- /* 测试goto 的用法,
- */
- procedure test_loop_go(pi_aab001 in number,
- po_fhz out varchar2,
- po_msg out varchar2) is
- cursor cur_ac02 is
- select * from ac02 where aab001 = pi_aab001;
- v_ctk001 stk03.ctk001%type;
- v_cnt number(6);
- v_nnd number(4);
- begin
- /* SELECT count(c.nn),nn*5
- into v_ctk001,v_nnd
- FROM SKC04 A, AC02 B, v_ac01_groupbyNNd C
- WHERE A.AAC001 = B.AAC001
- AND B.AAC001 = C.AAC001
- AND B.AAE140 = '310'
- AND A.CKA549 = '1'
- \* AND substr(A.AAE036, 1, 6) = PI_AAE043*\
- AND A.AAE100 = '1'
- \*AND B.BAE001 = NVL(PI_BAE001, B.BAE001)*\
- group by c.nn; */
- -- aab001 = 511500009511 ,
- -- aac001 = 1000687490 ,如果是 1000687490 这个人,那么就不更新
- -- aac001 = 1000687529 ,如果是 1000687529 这个人,那么就不更新
- set transaction name 'tran_1';
- for v_cur in cur_ac02 loop
- if v_cur.aac001 = 1000687490 then
- goto the_next;
- elsif v_cur.aac008 = 1 then
- update ac02 a
- set a.aac008 = 6
- where aac001 = v_cur.aac001
- and aae140 = v_cur.aae140;
- end if;
- <<the_next>>
- null;
- end loop;
- commit;
- end test_loop_go;
- /*
- 集合变量以及自定义异常的练习
- */
- procedure record_practice(pi_aac001 in number,
- po_fhz out varchar2,
- po_msg out varchar2) is
- v_cur_sac14 sac14%rowtype;
- -- 定义一个集合类型 方式 1
- type table_sac14 is table of sac14%rowtype index by pls_integer;
- --定义一个集合类型的变量
- sac14_tab table_sac14;
- -- 定义一个集合类型 方式2
- type table_ac01_ae01 is record(
- aac001 ac01.aac001%type,
- aab001 ac01.aab001%type,
- aab999 ae01.aab999%type);
- --定义一个集合类型的变量
- ac01_ae01_tab table_ac01_ae01;
- -- 自定义一个异常
- aae180_is_null_exp exception;
- --给自定义异常赋错误代码,必须 在 -20000到 -20999之间
- pragma exception_init(aae180_is_null_exp, -20001);
- v_aae180 number(5);
- v_sqlerrm varchar2(200);
- v_proc varchar2(200) := c_Pkg_Name || '.record_practice';
- v_params varchar2(200) := 'pi_aac001=' || pi_aac001;
- v_cnt_sac14 number(3);
- -- 嵌套子过程
- procedure validate_aae180 is
- begin
- select count(1) into v_cnt_sac14 from sac14 where aac001 = pi_aac001;
- if v_cnt_sac14 = 0 then
- raise_application_error(-20002,
- 'the person has not sac14,please confirm!');
- return;
- end if;
- select a.* bulk collect
- into sac14_tab
- from sac14 a
- where a.aac001 = pi_aac001;
- for v_index in sac14_tab.first .. sac14_tab.last loop
- -- 把集合类型变量赋值给一个 rowtype行类型变量
- v_cur_sac14 := sac14_tab(v_index);
- /*select nvl(v_cur_sac14.aae180, -99) into v_aae180 from dual;
- \*if nvl(v_cur_sac14.aae180, -99) = -99 then*\
- if v_aae180 = -99 then*/
- if v_cur_sac14.aae180 is null then
- raise aae180_is_null_exp;
- /* raise_application_error(-20001, 'aae180 can not be null');*/
- return;
- end if;
- end loop;
- exception
- when others then
- po_fhz := '-98';
- po_msg := '未知错误98,sqlerrm:' || sqlerrm;
- -- 增加自定义过程的判断
- v_sqlerrm := substr(sqlerrm, 1, 9);
- if v_sqlerrm = 'ORA-20001' then
- po_fhz := '_001';
- po_msg := v_params || ',该人员' || v_cur_sac14.aae041 ||
- '的基数为空,请检查!,sqlerrm=' || sqlerrm;
- end if;
- return;
- end validate_aae180;
- begin
- -- 初始化返回值
- po_fhz := '-1';
- po_msg := 'the init state';
- --调用用于校验aae180的嵌套子过程 validate_aae180
- validate_aae180;
- exception
- when others then
- po_fhz := '-99';
- po_msg := '未知错误,sqlerrm:' || sqlerrm;
- return;
- end record_practice;
- --- 统计部分
- /*
- 1 统计全市2015年的住院情况,开始日期,终止日期,病种,就诊医院等
- select temp_func_WYL('BAE001', bae001) BAE001,
- a.aac003,
- a.aac002,
- b.ckc546,
- substr(b.ckc537, 1, 8) ks,
- substr(b.ckc538, 1, 8) zz,
- b.ckb519
- from ac01 a, kc21 b
- where a.aac001 = b.aac001
- and b.ckc544 = '2'
- and substr(b.ckc538, 1, 4) = 2015
- -- AND A.AAB001 = 511500012810
- group by a.bae001, AAC003, AAC002, CKC546, b.ckc537, b.ckc538, CKB519
- order by a.bae001;*/
- Begin
- Null;
- End Pkg_Weiyl;
- /
oracle 集合变量以及自定义异常的用法的更多相关文章
- 分享:Oracle 系统变量函数用法说明
在Oracle数据库中,Oracle系统变量函数是经常会使用到的函数,分享下Oracle系统变量函数的用法. Oracle函数多种多样,系统变量函数就是其中之一,介绍三种最常见的系统变量函数. Ora ...
- Oracle数据库中序列(SEQUENCE)的用法详解
Oracle数据库中序列(SEQUENCE)的用法详解 在Oracle数据库中,序列的用途是生成表的主键值,可以在插入语句中引用,也可以通过查询检查当前值,或使序列增至下一个值.本文我们主要介绍了 ...
- $ cd `dirname $0` 和PWD%/* shell变量的一些特殊用法
在命令行状态下单纯执行 $ cd `dirname $0` 是毫无意义的.因为他返回当前路径的".". $0:当前Shell程序的文件名dirname $0,获取当前Shell程序 ...
- Oracle集合类型
Oracle集合类型介绍 集合类型 1. 使用条件: a. 单行单列的数据,使用标量变量 . b. 单行多列数据,使用记录 c. 单列多行数据,使用集合 *集 ...
- 转载~kxcfzyk:Linux C语言多线程库Pthread中条件变量的的正确用法逐步详解
Linux C语言多线程库Pthread中条件变量的的正确用法逐步详解 多线程c语言linuxsemaphore条件变量 (本文的读者定位是了解Pthread常用多线程API和Pthread互斥锁 ...
- Oracle start with connect by prior 用法
Oracle start with connect by prior 用法 语法: select * from 表名 where 条件1 start with 条件2 connect by pr ...
- Oracle集合操作函数:union、intersect、minus
[转]Oracle集合操作函数:union.intersect.minus 集合操作符专门用于合并多条select 语句的结果,包括:UNION, UNION ALL, INTERSECT, MINU ...
- Java集合中迭代器的常用用法
该例子展示了一个Java集合中迭代器的常用用法public class LinkedListTest { public static void main(String[] args) { List&l ...
- List<T>集合的Sort自定义排序用法简单解析
List<T>集合的Sort自定义排序用法简单解析: 如下:一系列无序数字,如果想要他们倒序排列,则使用如下代码: 那么如何理解这段代码呢? (x,y)表示相邻的两个对象,如果满足条件:x ...
随机推荐
- 用rsync从Linux到Windows远程备份
论 rsync是Linux系统下的数据镜像备份工具,从软件的命名上就可以看出来 了——remote sync.rsync支持大多数的类Unix系统,无论是Linux.Solaris还是BSD上都经过了 ...
- 走进Groovy (二)
承接上一篇,配置好环境后,开始正式学习语法.我假设看此文的同学至少会一定的JAVA语法,因此一些太过基础的就不记录了,基本上,大家看看示例就明白了. Groovy的卖点之一,就是全兼容JAVA的语法, ...
- 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 ...
- [VC6 console]调用API获取手机归属地
为了完成作业,就偷个懒糊了个获取手机归属地的程序,.我原本写的是MFC版本的,但是由于MFC的代码不是很通用,加上我没有学MFC的时候看别人MFC代码只能干瞪眼,看不懂,所以便改成控制台版本的了.但这 ...
- C# DateTime.Now 用法小记
1.DateTime.Now 获取时间跟系统当前时间一直并且格式一直,如系统时间带有星期几,获取的时间也会带有 2,以下为拷贝前人总结的: //2008年4月24日 System.DateTime ...
- zoj 3706 Break Standard Weight
/*题意:将两个砝码中的其中一个分成两块,三块组合最多有几种情况(可以只有一块,或者两块). 组合情况 i j m 三块砝码 (i+j)-m=m-(i+j) i+j i-j=j-i i j m (i ...
- handlebar.js使用
官方网站:http://handlebarsjs.com/ 下载及查看使用帮助,或者用百度cdn引用 一.定义模板 <script id="entry-template" t ...
- ArrayList-VS-LinkedList
ArrayList 是List接口的实现类:底层的数据结构是数组,而LinkedList底层数据结构是双向循环链表. 所以在查询时ArrayList效率高,增删时LinkedList高.由于List中 ...
- 获取执行计划——EXPLAN PLAN
一般获取执行计划有四种途径:1.执行explain plan,查询结果输出表.2.查询动态性能视图,它显示缓存在库缓存中的执行计划(有时查不出结果是因为执行计划已经不在库缓存中).3.查询AWR或St ...
- YII框架下实现密码修改
YII2 实现修改密码功能 主要难点: 1.密码加密 YII2对密码加密生成的结果是不同的,即用相同的初始密码在不同时间得到的加密结果不同,所以我们不能用常用的方法去验证密码是否正确(将密码加密后与数 ...