oracle存储过程与游标使用实例

create or replace procedure CLOSE_DIRECT_AUDIT_POINT(pointname     in varchar2,
                                                     new_pointname in varchar2) is
  v_audit_id     NUMBER(38);
  v_new_audit_id NUMBER(38);
  iCnt           number;
  v_zjhm         VARCHAR2(18);
  v_zjlx         char(1);
  v_xm           VARCHAR2(30);
  v_jhrsjhm      varchar2(11);
  --该信息审核点暂缓的学生
  cursor review_student_cur is
    select b.zjlx, b.zjhm, b.xm, c.jhrsjhm
      from T_PSINFO_REV_PUBLIC a, T_PSTU_REGINFO b, t_pstu_reginfo_jhr c
     where a.XXSHDID = v_audit_id
       and a.zjlx = b.zjlx
       and a.zjhm = b.zjhm
       and a.zjhm = c.zjhm
       and b.SHFLG = '6';

begin
 --取旧直审点编号
  select count(*) into iCnt from T_PSINFO_REVIEW where shdmc = pointname;
  if (iCnt = 1) then
    select xxshdid
      into v_audit_id
      from T_PSINFO_REVIEW
     where shdmc = pointname;
  else
    dbms_output.put_line('aduit point named[' || pointname || '] found [' || iCnt ||
                         '] records!');
    return;
  end if;


  --取新直审点编号
  select count(*)
    into iCnt
    from T_PSINFO_REVIEW
   where shdmc = new_pointname;
  if (iCnt = 1) then
    select xxshdid
      into v_new_audit_id
      from T_PSINFO_REVIEW
     where shdmc = new_pointname;
  else
    dbms_output.put_line('new aduit point named[' || new_pointname ||
                         '] found [' || iCnt || '] records!');
    return;
  end if;


  --关闭对应用户的校审核权限
  update T_AUTH_USER_ROLE
  set delflg='1'
   where yhbh in (select a.yhbh
                    from t_auth_user a, T_PSINFO_REVIEW b
                   where a.XXSHDID = b.XXSHDID
                     and a.XXSHDID in (select XXSHDID from t_psinfo_review where qxdm='310105'
                      and glzsxxbh is not null))
                      and jsbh='004';
  --统计审核点内暂存孩子数量
  select count(a.zjhm)
    into iCnt
    from T_PSINFO_REV_PUBLIC a, T_PSTU_REGINFO b
   where a.zjlx = b.zjlx
     and a.zjhm = b.zjhm
     and b.SHFLG = '6'
     and a.XXSHDID = v_audit_id;
  if (iCnt > 0) then
    dbms_output.put_line('There are ' || iCnt ||
                         ' students who is temporarily saved in this aduit point!');
    --修改审核点相关学生状态,暂存(6)——>待补齐材料(3)
    update T_PSTU_REGINFO
       set shflg = '3'
     where zjhm in (select a.zjhm
                      from T_PSINFO_REV_PUBLIC a, T_PSTU_REGINFO b
                     where a.zjlx = b.zjlx
                       and a.zjhm = b.zjhm
                       and b.SHFLG = '6'
                       and a.XXSHDID = v_audit_id);


    --将学生所属信息审核点迁移至新流转点
    update T_PSINFO_REV_PUBLIC
       set xxshdid = v_new_audit_id
     where zjhm in (select a.zjhm
                      from T_PSINFO_REV_PUBLIC a, T_PSTU_REGINFO b
                     where a.zjlx = b.zjlx
                       and a.zjhm = b.zjhm
                       and b.SHFLG = '6'
                       and a.XXSHDID = v_audit_id);


    iCnt := 0; --重置计数器
    open review_student_cur;
    loop
      fetch review_student_cur
        into v_zjlx, v_zjhm, v_xm, v_jhrsjhm;
      exit when review_student_cur%notfound;
      --逐条发短信
      insert into T_NOTICE_INFO
      (TZJLID,TZRZJLX,TZRZJHM,TZRSJHM,TZLB,TZMC,WYYW,WYNY,TZHFBZ,DYBZ,DXYW,DXNY,DXFSZT,
      DXFSSJ,DXFSCS,MTMSGID,TZCKZT,DELFLG)
      values
      (seq_tzjlid.nextval,v_zjlx,v_zjhm,v_jhrsjhm,'2','待补齐材料','0','','','0','1',
      '待定!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!',
      '0',sysdate,'1','','0','0');
    end loop;
    close review_student_cur;

  else
    dbms_output.put_line('There is no students who is temporarily saved in this aduit point,work skipped');
    return;
  end if;


  --commit;


end CLOSE_DIRECT_AUDIT_POINT;
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值