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年11月1日

* 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年11月1日

* 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

/**

* 生成其他费用(学生类型)

* 功能:根据查询条件遍历学生把每个学生需要缴纳的其他费用保存到应缴费用表,

如果该学生的其他费用已经存在于应缴费用表中则更新,否则插入,同时更新当前学生的其他费用

* 2015年11月6日

* p_njdm 年级代码

* p_xqdm 校区代码

* p_dwh 院系代码

* p_zydm 专业代码

* p_bjdm 班级代码

* p_xh 教务学号

* p_qtfyid 其他费用主键

* p_fymc 费用名称

* p_fy 费用

* p_czr 当前操作人

* o_errMsg 返回出错信息

*/

v_sql STRING(3000); --存放查询语句

TYPE cur_type IS REF CURSOR; --创建学生信息的动态游标,根据查询条件生成相应的游标

xsxx_cur cur_type;

xsxx_rec SFGL_XSXX%rowtype; --创建与SFGL_XSXX相同类型的临时集合

begin

--根据查询条件初始化的游标语句

v_sql := 'select * FROM SFGL_XSXX where 1=1 and nj = ''' || p_njdm || '''';

if p_xqdm is not null then

v_sql := v_sql || ' and xqdm = ''' || p_xqdm || '''';

end if;

if p_dwh is not null then

v_sql := v_sql || ' and yxdm = ''' || p_dwh || '''';

end if;

if p_zydm is not null then

v_sql := v_sql || ' and zydm = ''' || p_zydm || '''';

end if;

if p_bjdm is not null then

v_sql := v_sql || ' and bjdm = ''' || p_bjdm || '''';

end if;

if p_xh is not null then

v_sql := v_sql || ' and xh = ''' || p_xh || '''';

end if;

/*dbms_output.put_line('查询语句:'||v_sql);*/

--打开学生信息游标

open xsxx_cur for v_sql;

loop

fetch xsxx_cur into xsxx_rec; --把游标的值放到xsxx_rec临时集合

exit when xsxx_cur%notfound;

merge into SFGL_YJFY a

using (SELECT xsxx_rec.xsid xsid, p_njdm ||p_qtfyid|| 'xsqtfy' scm, '4' 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_fymc || '学生其他费用',p_fy,'4',xsxx_rec.xsid,p_njdm ||p_qtfyid|| 'xsqtfy',sysdate,p_czr,

sysdate,p_czr,null); --插入应缴费用表

update SFGL_XSXX set qtfy = p_fy WHERE XSID = xsxx_rec.xsid; --更新学生信息表'其他费用'字段

end loop;

close xsxx_cur;

exception

when others then

o_errMsg := '程序运行出现内部错误,请联系管理员。';

raise;

end SFGL_QTFY_XS;

p_njdmAttr   in type_varchar 这是定义的数组类型

CREATE OR REPLACE TYPE "TYPE_VARCHAR" AS TABLE OF VARCHAR2(200)

--创建一个collection类型,用于格式化输出,主要应用于存储过程传入数组类型参数。

php动态数组的存储过程,存储过程(数组参数、for循环、拼凑的动态sql游标、merge into)...相关推荐

  1. 如何获取Oracle存储过程中的参数名称、类型?

    在.net环境下如何通过存储过程明来获取Oracle存储过程的输入输出参数?获取后用于动态赋值参数的值. 转载于:https://www.cnblogs.com/sokoo/archive/2008/ ...

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

    create or replace procedure SFGL_XF_ONE_ADD(p_njdm in varchar2,p_yxdm in varchar2,p_zydm in varchar2 ...

  3. php动态数组的存储过程,PHP数组作为存储过程的输入

    这就是我现在正在做的事情:-在PHP中 foreach($array as $value) { $query = select abc from tblname where colname =&quo ...

  4. java中调用数组参数_java中如何调用带有数组类型参数的存储过程

    java中如何调用带有数组类型参数的存储过程 关注:95  答案:3  mip版 解决时间 2021-01-28 00:39 提问者万丈深渊 2021-01-27 14:00 不知道java中java ...

  5. ORACLE存储过程使用数组

    ORACLE存储过程使用数组 1 单维数组 --单维数组 DECLARE-- 定义一个数组TYPE emp_ssn_array IS TABLE OF NUMBER INDEX BY BINARY_I ...

  6. Mybatis调用PostgreSQL存储过程实现数组入参传递

    前言 项目中用到了Mybatis调用PostgreSQL存储过程(自定义函数)相关操作,由于PostgreSQL自带数组类型,所以有一个自定义函数的入参就是一个int数组,形如: CREATE OR ...

  7. mysql 存储过程 定义数组_MySql存储过程

    Mysql进阶 存储过程 1 什么是存储过程 1.存储过程,带有逻辑的sql语句 2.之前的sql没有条件判断,没有循环 3.存储过程带上流程控制语句(if while) 2 存储过程特点 1)执行效 ...

  8. mysql带参数的sql_MySql存储过程是带参数的存储过程(动态执行SQL语句)

    下文介绍的MySql存储过程是带参数的存储过程(动态执行SQL语句),该MySql存储过程是根据用户输入的条件和排序方式查询用户的信息,排序条件可以没有调用方式: call GetUsersDynam ...

  9. oracle存储过程中数组的使用

    oracle存储过程中数组的使用 create or replace package ArrayTestPKG1 is    type tt_type is table of varchar(32) ...

最新文章

  1. 寻找兄弟单词(2012.5.6百度实习)
  2. Spring干货汇总(含Spring Boot与Spring Cloud)
  3. 边缘计算架构_多接入边缘计算框架与参考架构简介
  4. 18、INSERT:插入数据(添加数据)
  5. java 堆 是用_Java8元空间和堆使用
  6. 引用js实现checkbox批量选中
  7. 中文分词——正向最大匹配法
  8. php自动载入类文件函数,我可以在没有PHP的类中自动加载函数文件吗?
  9. 【es】client通信流程与负载均衡
  10. php版本控制在线推送升级,ThinkPHP5:app版本控制,版本升级接口开发
  11. arduino图形编程——ardublock
  12. shell之文本过滤(awk)(转)
  13. php pdo exec,PDO::exec
  14. html网页制作代码大全表白 html表白代码大全可复制,浪漫的html表白特效网页制作源代码
  15. 最大传输单元:MTU
  16. 网络测试工具——iperf3使用说明
  17. 设计模式-七大原则(图解一目了然)
  18. 我支持刘翔,理由有三
  19. 非规则合并单元格内容合并
  20. f(t)=tu(t)matlab,设f(t)=ε(t)-ε(t-1),f1(t)=f(t)cos(10πt),试用MATLAB...

热门文章

  1. debian 笔记本 准系统 RTL8822BE 8723 8192 8188 8168 8111 8107 8821-22 等PCIE 无线网卡蓝牙驱动安装
  2. AI研究生的文学情怀,厦大硕士毕业生文言致谢聊三年求学路
  3. 苹果怎么开启开发者模式
  4. window 10中 administrator用户获取管理员权限
  5. windows 安装labelme
  6. HTML+CSS+JS购物网站制作【学生HTML静态网页作业作品】
  7. 校招社招互联网面试经验总结
  8. Windows让Tomcat以Apr的方式运行
  9. 北大软件“软件成分分析与漏洞检测工具”(CoBOT—SCA)正式发布
  10. C#毕业设计——基于C#+asp.net+sqlserver的工作计划流程管理系统设计与实现(毕业论文+程序源码)——流程管理系统