create or replace procedure project_sum(tabyear in number, sysdeptcode in char, deptcode in char) as --*-基础字段--*- v_category_name varchar2(255); --单位/类别/编号 v_dept_name varchar2(255); --单位名字 v_one_id varchar2(255); --一级分类id v_id number(10) default 10; --dxp id v_sort_no number(6) default 10; --dxp sort_no 排序列 v_category_one varchar2(255); --一级分类名字 v_category_two varchar2(255); --二级分类名字 v_one_dept_name varchar2(255); --该一级分类下的单位名字 v_source_name varchar2(255); --资金来源名字 v_d_id number(6) default 1; --一级分类序号 --*-总计字段--*- total_as_investment varchar2(255);--总计_调整前总投资 total_investment varchar2(255);--总计_总投资 total_col1 varchar2(255);--总计_2012年底累计完成投资 total_col2 varchar2(255);--总计_2012年底累计财务用款 total_col3 varchar2(255);--总计_调整前2013年计划投资 total_col4 varchar2(255);--总计_2013年计划投资 total_col5 varchar2(255);--总计_2013年已下达投资 total_col6 varchar2(255);--总计_调整前2013年计划财务用款 total_col7 varchar2(255);--总计_2013年计划财务用款 total_col8 varchar2(255);--总计_2013年已下达用款 total_col9 varchar2(255);--总计_2013年实际现金支出 total_col10 varchar2(255);--总计_新增生产能力 --*一级分类总投资--*- v_one_as_investment varchar2(255);--一级分类_调整前总投资 v_one_investment varchar2(255);--一级分类_总投资 v_one_col1 varchar2(255);--一级分类_2012年底累计完成投资 v_one_col2 varchar2(255);--一级分类_2012年底累计财务用款 v_one_col3 varchar2(255);--一级分类_调整前2013年计划投资 v_one_col4 varchar2(255);--一级分类_2013年计划投资 v_one_col5 varchar2(255);--一级分类_2013年已下达投资 v_one_col6 varchar2(255);--一级分类_调整前2013年计划财务用款 v_one_col7 varchar2(255);--一级分类_2013年计划财务用款 v_one_col8 varchar2(255);--一级分类_2013年已下达用款 v_one_col9 varchar2(255);--一级分类_2013年实际现金支出 v_one_col10 varchar2(255);--一级分类_新增生产能力 --*-二级分类字段--*- v_two_as_investment varchar2(255);--二级分类_调整前总投资 v_two_investment varchar2(255);--二级分类_总投资 v_two_col1 varchar2(255);--二级分类_2012年底累计完成投资 v_two_col2 varchar2(255);--二级分类_2012年底累计财务用款 v_two_col3 varchar2(255);--二级分类_调整前2013年计划投资 v_two_col4 varchar2(255);--二级分类_2013年计划投资 v_two_col5 varchar2(255);--二级分类_2013年已下达投资 v_two_col6 varchar2(255);--二级分类_调整前2013年计划财务用款 v_two_col7 varchar2(255);--二级分类_2013年计划财务用款 v_two_col8 varchar2(255);--二级分类_2013年已下达用款 v_two_col9 varchar2(255);--二级分类_2013年实际现金支出 v_two_col10 varchar2(255);--二级分类_新增生产能力 --*单位字段--*- v_dept_as_investment varchar2(255);--单位_调整前总投资 v_dept_investment varchar2(255);--单位_总投资 v_dept_col1 varchar2(255);--单位_2012年底累计完成投资 v_dept_col2 varchar2(255);--单位_2012年底累计财务用款 v_dept_col3 varchar2(255);--单位_调整前2013年计划投资 v_dept_col4 varchar2(255);--单位_2013年计划投资 v_dept_col5 varchar2(255);--单位_2013年已下达投资 v_dept_col6 varchar2(255);--单位_调整前2013年计划财务用款 v_dept_col7 varchar2(255);--单位_2013年计划财务用款 v_dept_col8 varchar2(255);--单位_2013年已下达用款 v_dept_col9 varchar2(255);--单位_2013年实际现金支出 v_dept_col10 varchar2(255);--单位_新增生产能力 --------------------------------------------------------------- -- bps_project 项目表 -- bps_prj_inves_relations 项目和投资来源关系表 -- bps_investment_source 资金来源表 -- bps_project_category 项目分类表 -- bps_department 单位表 -- bps_project_planning 计划表 --------------------------------------------------------------- --*单位取值--*- cursor dept_current is select d.department_name from bps_department d where 1 = 1; cursor dept_investment(v_dept_name varchar2) is --获取单位各类投资值 select sum(p.total_investment) from bps_project p,bps_project_category c,bps_department d, bps_project_planning pla where p.bps_category_id = c.id and p.bps_department_id=d.id and c.id = pla.category_id and pla.fiscal_year = '2013' and d.department_name=v_dept_name; --*一级分类取值--*- 公式(例:某一级分类总投资 = 该一级分类下所有二级分类总投资之和 或 所有单位总投资之和) cursor category_one_current is --获取所有一级分类 只统计 电网基建,生产性技改,非生产技改,小型基建,营销,信息,零购 select c.category_name,c.id from bps_project_category c where c.category_level = 1 and c.category_name != '科技项目' and c.category_name != '管理咨询' and c.category_name != '教育培训' and c.category_name != '非生产性大修' and c.category_name != '生产大修'; --*-二级分类取值--*-公式(例:某一级分类下的二级分类总投资= 该二级分类下所有单位总投资之和) cursor category_two_current(v_dept_id varchar2) is --取一级分类下的二级分类游标 select c.category_name from bps_project_category c where c.category_level=2 and c.father_code_id=v_dept_id; cursor category_two_currents(v_dept_id varchar2) is --取一级分类下的二级分类的各类投资值 select c.category_name from bps_project_category c where c.category_level=2 and c.father_code_id=v_dept_id; --*单位取值--*- cursor one_current(v_dept_id varchar2) is --获取所有一级分类 的单位 select distinct d.department_name from bps_project p, bps_department d, bps_project_category c where p.bps_category_id = c.id and p.bps_department_id=d.id and c.father_code_id in (select id from bps_project_category ca where ca.id=v_dept_id); --*资金来源取值--*- cursor investment_source(v_dept_id varchar2) is --获取资金来源 param:一级分类 select s.source_name from bps_investment_source s,bps_project p,bps_prj_inves_relations r,bps_project_category c where p.bps_category_id = c.id and r.bps_project_id =p.id and r.bps_investment_source_id=s.id and c.father_code_id=v_dept_id; cursor investment_source_all is --获取所有资金来源 select s.source_name from bps_investment_source s,bps_project p,bps_prj_inves_relations r,bps_project_category c where p.bps_category_id = c.id and r.bps_project_id =p.id and r.bps_investment_source_id=s.id; --*其它取值--*- cursor dept_investment_c(v_dept_name varchar2,v_category_one varchar2) is --获取一级分类下的单位各类投资值 select pla.adjust_execution_amount from bps_project p,bps_project_category c,bps_department d, bps_project_planning pla where p.bps_category_id = c.id and p.bps_department_id=d.id and c.id = pla.category_id and pla.fiscal_year = '2013' and d.department_name=v_dept_name and c.category_name=v_category_one; begin --dbms_output.put_line(); --插入数据前 清空dxp_42数据 delete from dxp_42 where tab_year = tabyear and dept_code = deptcode and sys_dept_code = sysdeptcode; --*总计值--*- insert into dxp_42(item_name, id, dept_code, sys_dept_code, tab_year, sort_no,total_investment) values('总计',v_id,deptcode,sysdeptcode,tabyear,v_sort_no,total_investment); v_id := v_id + 1; v_sort_no := v_sort_no + 1; open investment_source_all;--开启 取所有资金来源游标 loop fetch investment_source_all into v_source_name; exit when investment_source_all%notfound; insert into dxp_42(item_name, id, dept_code, sys_dept_code, tab_year, sort_no,d_source_name) values('',v_id,deptcode,sysdeptcode,tabyear,v_sort_no,v_source_name); v_id := v_id + 1; v_sort_no := v_sort_no + 1; end loop; close investment_source_all; --插入一行空行 insert into dxp_42(item_name, id, dept_code, sys_dept_code, tab_year, sort_no,d_source_name) values('',v_id,deptcode,sysdeptcode,tabyear,v_sort_no,''); v_id := v_id + 1; v_sort_no := v_sort_no + 1; --*开启单位游标--*- open dept_current; loop fetch dept_current into v_dept_name; exit when dept_current%notfound; open dept_investment(v_dept_name); --嵌套游标 param:单位名字 loop fetch dept_investment into v_dept_investment; exit when dept_investment%notfound; insert into dxp_42 (item_name, id, dept_code, sys_dept_code, tab_year, sort_no,total_investment) values(v_dept_name,v_id,deptcode,sysdeptcode,tabyear,v_sort_no,v_dept_investment); v_id := v_id + 1; v_sort_no := v_sort_no + 1; end loop; close dept_investment; --关闭单位统计 end loop; close dept_current; --关闭单位游标 --插入一行空行 insert into dxp_42(item_name, id, dept_code, sys_dept_code, tab_year, sort_no,d_source_name) values('',v_id,deptcode,sysdeptcode,tabyear,v_sort_no,''); v_id := v_id + 1; v_sort_no := v_sort_no + 1; --*开启一级分类游标--*- open category_one_current; --开启一级分类游标 先列出一行一级分类,在插入 二级分类 和 单位 实现分组目的 loop fetch category_one_current into v_category_one,v_one_id;--这里取的一级分类id 存入变量 方便下面实现动态根据一级分类id 取得相应二级分类 exit when category_one_current%notfound; insert into dxp_42 (item_name, id, dept_code, sys_dept_code, tab_year, sort_no,d_id) values (v_category_one,v_id,deptcode,sysdeptcode,tabyear,v_sort_no,v_d_id); v_d_id := v_d_id + 1; --每个一级分类 添加序号 v_id := v_id + 1; v_sort_no := v_sort_no + 1; --*累加总计字段值--*-注:总计各类投资值是根据一级分类的资金来源拆分统计的 -- total_as_investment:=total_as_investment+v_one_as_investment; --总计_调整前总投资 -- total_investment:=total_investment+v_one_investment; --总计_总投资 -- total_col1:=total_col1+v_one_col1; --总计_2012年底累计完成投资 -- total_col2:=total_col2+v_one_col2; --总计_2012年底累计财务用款 -- total_col3:=total_col3+v_one_col3; --总计_调整前2013年计划投资 -- total_col4:=total_col4+v_one_col4; --总计_2013年计划投资 -- total_col5:=total_col5+v_one_col5; --总计_2013年已下达投资 -- total_col6:=total_col6+v_one_col6; --总计_调整前2013年计划财务用款 -- total_col7:=total_col7+v_one_col7; --总计_2013年计划财务用款 -- total_col8:=total_col8+v_one_col8; --总计_2013年已下达用款 -- total_col9:=total_col9+v_one_col9; --总计_2013年实际现金支出 -- total_col10:=total_col10+v_one_col10; --总计_新增生产能力 --*累加end--*- --插入一行空行 insert into dxp_42(item_name, id, dept_code, sys_dept_code, tab_year, sort_no,d_source_name) values('',v_id,deptcode,sysdeptcode,tabyear,v_sort_no,''); v_id := v_id + 1; v_sort_no := v_sort_no + 1; open investment_source(v_one_id);--这里实现 根据资金来源分组统计 该一级分类下资金来源统计 根据该一级分类取得相应的资金来源 loop fetch investment_source into v_source_name; exit when investment_source%notfound; insert into dxp_42 (item_name, id, dept_code, sys_dept_code, tab_year, sort_no,d_source_name) values ('',v_id,deptcode,sysdeptcode,tabyear,v_sort_no,v_source_name); v_id := v_id + 1; v_sort_no := v_sort_no + 1; end loop; close investment_source; --关闭资金来源 --插入一行空行 insert into dxp_42(item_name, id, dept_code, sys_dept_code, tab_year, sort_no,d_source_name) values('',v_id,deptcode,sysdeptcode,tabyear,v_sort_no,''); v_id := v_id + 1; v_sort_no := v_sort_no + 1; open category_two_current(v_one_id); --开启二级分类游标 根据当前一级分类查询二级分类名字 loop --zb 嵌套游标 插入二级分类的各类投资值 fetch category_two_current into v_category_two; exit when category_two_current%notfound; insert into dxp_42 (item_name, id, dept_code, sys_dept_code, tab_year,sort_no) values (v_category_two,v_id,deptcode,sysdeptcode,tabyear,v_sort_no); v_id := v_id + 1; v_sort_no := v_sort_no + 1; end loop; close category_two_current;--关闭二级分类游标 --插入一行空行 insert into dxp_42(item_name, id, dept_code, sys_dept_code, tab_year, sort_no,d_source_name) values('',v_id,deptcode,sysdeptcode,tabyear,v_sort_no,''); v_id := v_id + 1; v_sort_no := v_sort_no + 1; open one_current(v_one_id); --开启一级分类单位 根据当前一级分类查询单位名称 以及 各类资金 loop fetch one_current into v_one_dept_name; exit when one_current%notfound; insert into dxp_42 (item_name, id, dept_code, sys_dept_code, tab_year, sort_no) values (v_one_dept_name,v_id,deptcode,sysdeptcode,tabyear,v_sort_no); v_id := v_id + 1; v_sort_no := v_sort_no + 1; --*累加一级字段值--*- 注:二级分类各类投资值根据资金来源统计 -- v_one_as_investment:=v_one_as_investment+v_two_as_investment; --一级分类_调整前总投资 -- v_one_investment:=v_one_investment+v_two_investment; --一级分类_总投资 -- v_one_col1:=v_one_col1+v_two_col1; --一级分类_2012年底累计完成投资 -- v_one_col2:=v_one_col2+v_two_col2; --一级分类_2012年底累计财务用款 -- v_one_col3:=v_one_col3+v_two_col3; --一级分类_调整前2013年计划投资 -- v_one_col4:=v_one_col4+v_two_col4; --一级分类_2013年计划投资 -- v_one_col5:=v_one_col5+v_two_col5; --一级分类_2013年已下达投资 -- v_one_col6:=v_one_col6+v_two_col6; --一级分类_调整前2013年计划财务用款 -- v_one_col7:=v_one_col7+v_two_col7; --一级分类_2013年计划财务用款 -- v_one_col8:=v_one_col8+v_two_col8; --一级分类_2013年已下达用款 -- v_one_col9:=v_one_col9+v_two_col9; --一级分类_2013年实际现金支出 -- v_one_col10:=v_one_col10+v_two_col10; --一级分类_新增生产能力 --*累加end--*- end loop; close one_current;--关闭一级分类单位 --插入一行空行 insert into dxp_42(item_name, id, dept_code, sys_dept_code, tab_year, sort_no,d_source_name) values('',v_id,deptcode,sysdeptcode,tabyear,v_sort_no,''); v_id := v_id + 1; v_sort_no := v_sort_no + 1; end loop; close category_one_current;--关闭一级分类游标 end; /
相关推荐
本文将从 Oracle 存储过程的基础知识开始,逐步深入到 Oracle 存储过程的高级应用,包括 Hibernate 调用 Oracle 存储过程和 Java 调用 Oracle 存储过程的方法。 Oracle 存储过程基础知识 Oracle 存储过程是 Oracle...
Oracle存储过程unwrap解密工具主要用于处理Oracle数据库中的加密存储过程。在Oracle数据库系统中,为了保护敏感代码或数据,开发人员有时会选择对存储过程进行加密。然而,当需要查看、调试或恢复这些加密的存储过程...
总结起来,"帆软报表Oracle存储过程解决storeParameter1参数试用插件"主要是针对在调用无参数Oracle存储过程时出现的异常问题提供的一种解决方案。通过安装并配置这个插件,用户可以顺利地在帆软报表中调用不包含...
以下是对“oracle存储过程解锁”这一主题的深入解析。 ### 标题:“oracle存储过程解锁” #### 解析: 在Oracle数据库中,存储过程是一种预先编译并存储在数据库中的SQL代码块,用于执行复杂的业务逻辑或数据处理...
本文实例讲述了Python使用cx_Oracle调用Oracle存储过程的方法。分享给大家供大家参考,具体如下: 这里主要测试在Python中通过cx_Oracle调用PL/SQL。 首先,在数据库端创建简单的存储过程。 create or replace ...
Oracle存储过程是数据库管理系统中的一种重要特性,它允许开发者编写一系列SQL语句和PL/SQL块,形成可重复使用的代码单元。这篇博客“oracle存储过程-帮助文档”可能提供了关于如何创建、调用和管理Oracle存储过程...
### Oracle存储过程、函数与DBLink详解 #### 一、Oracle存储过程简介 在Oracle数据库中,存储过程是一种预编译好的SQL代码集合,它可以接受输入参数、返回单个值或多个值,并能够执行复杂的数据库操作。存储过程...
本文将深入探讨如何在Spring Boot项目中整合MyBatis,实现调用Oracle存储过程并处理游标返回的数据。 首先,我们需要在Spring Boot项目中引入相关的依赖。在`pom.xml`文件中添加Oracle JDBC驱动(ojdbc66-oracle...
以下是一个简单的示例,展示了如何调用一个不带参数的Oracle存储过程: ```java Session session = sessionFactory.openSession(); Transaction transaction = session.beginTransaction(); session....
本篇文章将深入探讨如何在Oracle存储过程中使用临时表,包括会话级临时表和事务级临时表。 ### 会话级临时表 会话级临时表(Session-Level Temporary Tables)只在创建它的会话内可见,并且在会话结束时自动删除。...
Oracle存储过程是数据库管理系统Oracle中的一个关键特性,它允许开发者编写一组预编译的SQL和PL/SQL语句,以实现特定的业务逻辑或数据库操作。这篇教程将深入讲解Oracle存储过程的各个方面,帮助你从基础到高级全面...
本文将详细讲解如何在C#中使用自定义列表(List)作为参数调用Oracle存储过程,以及实现这一功能的关键技术和注意事项。 首先,我们需要了解Oracle数据库中的PL/SQL类型,例如VARCAR2、NUMBER等,它们对应于C#中的...
### Oracle存储过程批量提交知识点详解 在Oracle数据库中,存储过程是一种重要的数据库对象,它可以包含一系列SQL语句和控制流语句,用于实现复杂的业务逻辑处理。存储过程不仅可以提高应用程序性能,还可以确保...
标题中的“pb中执行oracle存储过程脚本”指的是在PowerBuilder(简称PB)环境中调用Oracle数据库的存储过程。PowerBuilder是一种可视化的开发工具,常用于构建数据驱动的应用程序。Oracle存储过程则是在Oracle数据库...
oracle 存储过程导出excel oracle 存储过程导出excel oracle 存储过程导出excel oracle 存储过程导出excel oracle 存储过程导出excel
Oracle 存储过程调用 CallabledStatement 实用例子(IN OUT 传游标) 一、Oracle 存储过程简介 Oracle 存储过程是一种可以在 Oracle 数据库中存储和执行的程序单元。存储过程可以由多种语言编写,例如 PL/SQL、...
本篇将深入探讨如何在Oracle存储过程中创建并返回一个结果集,并结合Java代码展示如何在应用程序中使用这个结果集。 首先,我们需要理解`OUT`参数的概念。在Oracle存储过程中,`IN`参数用于传递数据到过程,`OUT`...
可以将SQL Server存储过程转为oracle存储过程的工具
Oracle存储过程常用技巧 Oracle存储过程是一种强大的数据库对象,它可以帮助开发者简化复杂的业务逻辑,并提高数据库的安全性和性能。在 Oracle 中,存储过程是一种特殊的 PL/SQL 程序,它可以接受输入参数,执行...
本话题将详细探讨如何在Oracle存储过程中调用外部的批处理脚本,如Windows系统的BAT文件,以实现数据库操作与系统命令的集成。 首先,`Oracle存储过程`是一种预编译的SQL和PL/SQL代码集合,可以被多次调用以执行...