监考人员

create or replace procedure KSGL_JKRY_ADD(p_jghs   in varchar2,
                                          p_jzgxms in varchar2,
                                          p_ksxn   in varchar2,
                                          p_ksxq   in varchar2,
                                          o_msg    out varchar2) is
  /**
  *  监考人员新增
  *  2015年8月31日
 
  p_jghs 教工号数据集
  p_jzgxms 教职工姓名
  p_ksxn 考试学年
  p_ksxq 考试学期
  o_msg 返回信息
  */
  count_start number; --记录插入前数量
  count_end   number; --记录插入后数量
  e_no exception;
begin
  select count(*) into count_start from KSGL_JKRY;
  --批量插入操作
  INSERT INTO KSGL_JKRY
    (KSXN, KSXQ, JKRYBH, JKRYXM, XBMC, LXDH, SSDW, SSDWMC, JKDW, JKDWMC)
    SELECT p_ksxn,
           p_ksxq,
           SzglJsjbxxb.JGH,
           SzglJsjbxxb.XM,
           XtglDmjXbm.MC,
           SzglJsjbxxb.SJHM,
           SzglJsjbxxb.SSDWDM,
           SzglJsjbxxb.SSDWMC,
           SzglJsjbxxb.SSDWDM,
           SzglJsjbxxb.SSDWMC
      FROM SZGL_JSJBXXB SzglJsjbxxb, XTGL_DMJ_XBM XtglDmjXbm
     WHERE SzglJsjbxxb.XB = XtglDmjXbm.Dm(+)
          --如果当前学年学期已经存在该监考人员则不添加,所以需要过滤,条件如下
       and not exists
     (select 1
              from KSGL_JKRY jkry
             where p_ksxn = jkry.ksxn
               and p_ksxq = jkry.ksxq
               and SzglJsjbxxb.Jgh = jkry.jkrybh)
       and ((SzglJsjbxxb.JGH in
           --使用正则函数regexp_substr拆分字符串, eg将'1,2,3'拆分成'1','2','3'的集合。
           (select regexp_substr(p_jghs, '[^,]+', 1, rownum)
                from dual
              connect by rownum <=
                         length(regexp_replace(p_jghs, '[^,]', null)))) or
           SzglJsjbxxb.Xm in
           (select regexp_substr(p_jzgxms, '[^,]+', 1, rownum)
               from dual
             connect by rownum <=
                        length(regexp_replace(p_jzgxms, '[^,]', null))));
  --统计插入数量
  select count(*) into count_end from KSGL_JKRY;
  if(count_end - count_start=0) then
      o_msg := '操作结束,没有新增监考人员';
    RAISE e_no;
  end if;
exception
  when e_no then
    rollback;
  when others then
    o_msg := '内部出错,新增失败';
    rollback;
 
end KSGL_JKRY_ADD;

猜你喜欢

转载自563432906.iteye.com/blog/2244501