存储进程(数组参数、for循环、拼接的动态sql游标、merge into)ITeye - 威尼斯人

存储进程(数组参数、for循环、拼接的动态sql游标、merge into)ITeye

2019-01-10 22:51:51 | 作者: 鸿运 | 标签: 学生,膏火,更新 | 浏览: 396

create or replace procedure SFGL_XF_ONE_ADD(p_njdm in varchar2,
 p_yxdm in varchar2,
 p_zydm in varchar2,
 p_fy in varchar2,
 p_czr in varchar2,
 o_errMsg out varchar2) is
 * 生成单个年级专业膏火
 * 功用:遍历当时年级的学院专业的学生把每个学生需求交纳的膏火保存到应缴费用表,
 假如该学生的膏火现已存在于应缴费用表中则更新,不然刺进,一起更新当时学生的膏火 
 * 2015年
 * p_njdm 年级代码
 * p_yxdm 院系代码
 * p_zydm 专业代码
 * p_fy 住宿费用
 * p_czr 当时操作人
 * o_errMsg 回来犯错信息
begin
 for xsxx_rec in (SELECT * FROM SFGL_XSXX WHERE nj = p_njdm and yxdm = p_yxdm and zydm = p_zydm) loop
 merge into SFGL_YJFY a
 using (SELECT xsxx_rec.xsid xsid, p_njdm ||p_yxdm||p_zydm||xf scm, 1 lx FROM dual) b
 on (a.YJYH = b.xsid and a.SCM = b.scm and a.FYLX = b.lx)
 when matched then
 update set a.FY = p_fy,a.modified_time = sysdate,a.modified_by = p_czr --更新费用,修正时刻,修正人
 when not matched then
 insert
 (a.YJFYID,a.FYMC,a.FY,a.FYLX,a.YJYH,a.SCM,
 a.modified_Time,a.modified_By,a.create_Time,a.create_By,a.bz)
 values
 (XL_SFGL_YJFY.NEXTVAL,p_njdm ||年||xsxx_rec.yxmc||xsxx_rec.zymc||膏火,p_fy,1,xsxx_rec.xsid,p_njdm ||p_yxdm||p_zydm||xf,
 sysdate,p_czr,sysdate,p_czr,null); --刺进应缴费用表
 update SFGL_XSXX set xf = p_fy WHERE XSID = xsxx_rec.xsid; --更新学生信息表膏火字段
 end loop;
exception
 when others then
 o_errMsg := 程序运转呈现内部过错,请联络管理员。;
 raise;
end SFGL_XF_ONE_ADD;

 

create or replace procedure SFGL_XF_All_ADD(p_njdmAttr in type_varchar,
 p_czr in varchar2,
 o_errMsg out varchar2) is
 * 生成悉数膏火
 * 功用:依据挑选的年级生成悉数的膏火,遍历当时年级的学院专业的学生把每个学生需求交纳的膏火保存到应缴费用表,
 假如该学生的膏火现已存在于应缴费用表中则更新,不然刺进,一起更新当时学生的膏火 
 * 2015年
 * p_njdmAttr 年级代码数组
 * p_czr 当时操作人
 * o_errMsg 回来犯错信息
begin
--循环需求生成的年级
 for i in 1..p_njdmAttr.Count loop 
 --依据年级查找膏火表
 for xf_rec in (SELECT * FROM SFGL_XF WHERE nj = p_njdmAttr(i)) loop 
 --依据年级、院系、专业查找学生信息,然后遍历这些学生查看在应缴费用表中是否现已存在,存在则更新,不存在刺进;
 --最终更新这个学生的膏火字段
 for xsxx_rec in (SELECT * FROM SFGL_XSXX WHERE nj = xf_rec.nj and yxdm = xf_rec.yxdm and zydm = xf_rec.zydm) loop
 merge into SFGL_YJFY a
 using (SELECT xsxx_rec.xsid xsid, xsxx_rec.nj ||xsxx_rec.yxdm||xsxx_rec.zydm|| xf scm, 1 lx FROM dual) b
 on (a.YJYH = b.xsid and a.SCM = b.scm and a.FYLX = b.lx)
 when matched then
 update set a.FY = xf_rec.fy,a.modified_time = sysdate,a.modified_by = p_czr --学生信息现已存在,更新应缴费用表中的费用,修正时刻,修正人
 when not matched then
 insert
 (a.YJFYID,a.FYMC,a.FY,a.FYLX,a.YJYH,a.SCM,
 a.modified_Time,a.modified_By,a.create_Time,a.create_By,a.bz)
 values
 (XL_SFGL_YJFY.NEXTVAL,xsxx_rec.nj ||年||xsxx_rec.yxmc||xsxx_rec.zymc||膏火,xf_rec.fy,1,xsxx_rec.xsid,xsxx_rec.nj ||xsxx_rec.yxdm||xsxx_rec.zydm|| xf,
 sysdate,p_czr,sysdate,p_czr,null); --学生信息不现已存在应缴费用表中,刺进
 update SFGL_XSXX set xf = xf_rec.fy WHERE XSID = xsxx_rec.xsid; --更新学生信息表膏火字段
 end loop;
 end loop;
 end loop;
exception
 when others then
 o_errMsg := 程序运转呈现内部过错,请联络管理员。;
 raise;
end SFGL_XF_All_ADD;

 

create or replace procedure SFGL_QTFY_XS(p_njdm in varchar2,
 p_xqdm in varchar2,
 p_dwh in varchar2,
 p_zydm in varchar2,
 p_bjdm in varchar2,
 p_xh in varchar2,
 p_qtfyid in varchar2,
 p_fymc in varchar2,
 p_fy in varchar2,
 p_czr in varchar2,
 o_errMsg out varchar2) is
 * 生成其他费用(学生类型)
 * 功用:依据查询条件遍历学生把每个学生需求交纳的其他费用保存到应缴费用表,
 假如该学生的其他费用现已存在于应缴费用表中则更新,不然刺进,一起更新当时学生的其他费用                          
			
版权声明
本文来源于网络,版权归原作者所有,其内容与观点不代表威尼斯人立场。转载文章仅为传播更有价值的信息,如采编人员采编有误或者版权原因,请与我们联系,我们核实后立即修改或删除。

猜您喜欢的文章

阅读排行

  • 1
  • 2
  • 3
  • 4

    MongoDBITeye

    文档,测验,调集
  • 5

    RAC的Diskgroup重建ITeye

    磁盘,重建,数据库
  • 6

    Switch to UTFITeye

    编码,设置,文件
  • 7

    pl/sql使用之使用utlITeye

    文件,办法,输出
  • 8
  • 9

    (转)in 和 existITeye

    分区,查询,一个
  • 10

    oracle正则表达式ITeye

    正则表达式,匹配,表达式