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
今日推荐
周排行