create or replace procedure SFGL_XF_SFBZ(p_xn in varchar2,
p_czr in varchar2,
o_errMsg out varchar2) is
/**
* 生成收费标准
* 功能:按学年生成收费标准。1、生成新年级的收费标准;2、已经毕业的年级不生成。
* 2016年10月21日
* p_xn 学年
* p_czr 当前操作人
* o_errMsg 返回出错信息
*/
v_xn1 varchar2(10); --记录学年的第一个年份 eg:2016-2017 中的2016
before_Xn varchar2(10); --记录前一个学年
type t_arr is varray(3) of varchar2(20); --年级数组
v_nj t_arr;
v_count number := 0; --记录查询条数
begin
v_xn1 := substr(p_xn, 1, 4); --eg:2017
before_Xn := (v_xn1-1)||'-'||v_xn1; --eg:2016-2017
v_nj := t_arr(null, null,null);
v_nj(1) := v_xn1-2; --eg:2015
v_nj(2) := v_xn1-1; --eg:2016
v_nj(3) := v_xn1; --eg:2017
--判断前两个年级的学年数据是否已经生成
for x in 1..v_nj.count-1 loop
v_count :=0;
select count(1) into v_count from sfgl_xf t where t.xn=p_xn and t.nj = v_nj(x);
if v_count = 0 then
insert into sfgl_xf(xfid,yxdm,zydm,fy,modified_time,modified_by,create_time,create_by,nj,zsfy,xn,ybfy)
select Xl_Sfgl_Xf.NEXTVAL,t.yxdm,t.zydm,t.fy,sysdate,p_czr,sysdate,p_czr,t.nj,t.zsfy,p_xn,t.ybfy from sfgl_xf t where t.xn=before_Xn and t.nj = v_nj(x);
end if;
end loop;
--生成最新年级的数据,以上一个学年的最新年级为准
--eg:2016-2017的2016年级数据 参考 2015-2016的2015级数据
v_count :=0;
select count(1) into v_count from sfgl_xf t where t.xn=p_xn and t.nj = v_nj(3);
if v_count = 0 then
insert into sfgl_xf(xfid,yxdm,zydm,fy,modified_time,modified_by,create_time,create_by,nj,zsfy,xn,ybfy)
select Xl_Sfgl_Xf.NEXTVAL,t.yxdm,t.zydm,t.fy,sysdate,p_czr,sysdate,p_czr,v_nj(3),t.zsfy,p_xn,t.ybfy from sfgl_xf t where t.xn=before_Xn and t.nj = v_nj(2);
end if;
exception
when others then
o_errMsg := '程序运行出现内部错误,请联系管理员。';
raise;
end SFGL_XF_SFBZ;
type t_arr is varray(3) of varchar2(20); --年级数组