Oracle 查询存储过程做横向报表的方法
发布时间:2024-01-16 00:59:55
因为要牵扯到小计,所以需要计算两次。
想法:
1、把查询到的结果,插入到临时表,
2、把统计结果插入到临时表。
3、查询临时表记录放置到游标中。
4、删除临时表记录。
包的定义声明:
CREATE OR REPLACE PACKAGE CHEN_TEST_PACKGE IS
type cursor_type is ref cursor;
/************************************************************************************/
/* 功能说明:查询某种公告报表 */
/* 参数说明: */
/* i_id_capital_dynamic_manage IN VARCHAR2 某种公告ID */
/* o_cursor OUT cursor_type 返回游标 */
/* */
/* 创建日期 姓名 */
/* 2013-03-08 路人甲 */
/************************************************************************************/
PROCEDURE p_list_bulletin_report( i_id_capital_dynamic_manage IN VARCHAR2,
o_cursor OUT cursor_type);
END CHEN_TEST_PACKGE;
包的实现:
CREATE OR REPLACE PACKAGE BODY CHEN_TEST_PACKGE IS
/************************************************************************************/
/* 功能说明:查询某种公告报表 */
/* 参数说明: */
/* i_id_capital_dynamic_manage IN VARCHAR2 某种公告ID */
/* o_cursor OUT bulletin_report_type 返回游标 */
/* */
/* 创建日期 姓名 */
/* 2013-03-08 路人甲 */
/************************************************************************************/
PROCEDURE p_list_bulletin_report( i_id_capital_dynamic_manage IN VARCHAR2,
o_cursor OUT bulletin_report_type)
AS
set_id_bulletin_report_temp VARCHAR2(50); -- 定义临时变量
BEGIN
begin
--给临时变量赋值
--select to_char(sysdate,'yyyymmddhh24missSSS') into set_id_bulletin_report_temp from dual;
select i_id_capital_dynamic_manage into set_id_bulletin_report_temp from dual;
--获取数据插入临时表
insert into scms_bulletin_report_temp
(
id_bulletin_report_temp,
biz_Name ,
t01 ,
t07 ,
t14 ,
t21 ,
t1M ,
t2M ,
t3M ,
t4M ,
t5M ,
t6M ,
t1Y ,
t2Y ,
tCount ,
sort_no
)
select c.*,
rownum as sort_no
from(
select
set_id_bulletin_report_temp as id_bulletin_report_temp,
scms_common_packge.get_biz_name(b.biz_id) as biz_Name,
max(case when b.term_type='T01' then b.c else 0 end) as T01,
max(case when b.term_type='T07' then b.c else 0 end) as T07,
max(case when b.term_type='T14' then b.c else 0 end) as T14,
max(case when b.term_type='T21' then b.c else 0 end) as T21,
max(case when b.term_type='T1M' then b.c else 0 end) as T1M,
max(case when b.term_type='T2M' then b.c else 0 end) as T2M,
max(case when b.term_type='T3M' then b.c else 0 end) as T3M,
max(case when b.term_type='T4M' then b.c else 0 end) as T4M,
max(case when b.term_type='T5M' then b.c else 0 end) as T5M,
max(case when b.term_type='T6M' then b.c else 0 end) as T6M,
max(case when b.term_type='T1Y' then b.c else 0 end) as T1Y,
max(case when b.term_type='T2Y' then b.c else 0 end) as T2Y,
sum(b.c) as BIZ_ID_COUNT
from
(
select a.term_type,a.biz_id, sum(a.capital_claim) c
from (select report.capital_claim,
report.biz_id,
detail.term_type
from scms_capital_claim_report report,
scms_capital_assign_detail detail,
scms_capital_dynamic_manage manager
where manager.id_capital_dynamic_manage = detail.id_capital_dynamic_manage
and report.id_capital_assign_detail = detail.id_capital_assign_detail
and detail.id_capital_dynamic_manage = i_id_capital_dynamic_manage
and manager.IS_SETTLEMENT = '1'
and manager.IS_CONFIRM = '1'
) a
group by a.term_type, a.biz_id
) b group by b.biz_id
) c;
-- 插入总记录数
insert into scms_bulletin_report_temp
(
id_bulletin_report_temp,
biz_Name ,
t01 ,
t07 ,
t14 ,
t21 ,
t1M ,
t2M ,
t3M ,
t4M ,
t5M ,
t6M ,
t1Y ,
t2Y ,
tCount ,
sort_no
)
select c.*,
(select max(sort_no)+1 from scms_bulletin_report_temp te where te.id_bulletin_report_temp = set_id_bulletin_report_temp ) as sort_no
from(
select
set_id_bulletin_report_temp as id_bulletin_report_temp,
'总计(天数)' as biz_Name,
max(case when b.term_type='T01' then b.c else 0 end) as T01,
max(case when b.term_type='T07' then b.c else 0 end) as T07,
max(case when b.term_type='T14' then b.c else 0 end) as T14,
max(case when b.term_type='T21' then b.c else 0 end) as T21,
max(case when b.term_type='T1M' then b.c else 0 end) as T1M,
max(case when b.term_type='T2M' then b.c else 0 end) as T2M,
max(case when b.term_type='T3M' then b.c else 0 end) as T3M,
max(case when b.term_type='T4M' then b.c else 0 end) as T4M,
max(case when b.term_type='T5M' then b.c else 0 end) as T5M,
max(case when b.term_type='T6M' then b.c else 0 end) as T6M,
max(case when b.term_type='T1Y' then b.c else 0 end) as T1Y,
max(case when b.term_type='T2Y' then b.c else 0 end) as T2Y,
sum(b.c) as BIZ_ID_COUNT
from
(
select a.term_type,'biz_id_count' as biz_id, sum(a.capital_claim) c
from (select report.capital_claim,
report.biz_id,
detail.term_type
from scms_capital_claim_report report,
scms_capital_assign_detail detail,
scms_capital_dynamic_manage manager
where manager.id_capital_dynamic_manage = detail.id_capital_dynamic_manage
and report.id_capital_assign_detail = detail.id_capital_assign_detail
and detail.id_capital_dynamic_manage = i_id_capital_dynamic_manage
and manager.IS_SETTLEMENT = '1'
and manager.IS_CONFIRM = '1'
) a
group by a.term_type
) b group by b.biz_id
) c;
-- 查询刚刚插入的表记录
open o_cursor for
select
id_bulletin_report_temp as idBulletinReportTemp,
biz_Name as bizName ,
t01 as t01 ,
t07 as t07 ,
t14 as t14 ,
t21 as t21 ,
t1M as t1M ,
t2M as t2M ,
t3M as t3M ,
t4M as t4M ,
t5M as t5M ,
t6M as t6M ,
t1Y as t1Y ,
t2Y as t2Y ,
tCount as tCount,
sort_no as sortNo
from scms_bulletin_report_temp temp
where temp.id_bulletin_report_temp = set_id_bulletin_report_temp
order by sortNo asc;
-- 删除:根据ID删除刚刚插入的记录
delete from scms_bulletin_report_temp temp where temp.id_bulletin_report_temp = set_id_bulletin_report_temp;
commit;
end;
END p_list_bulletin_report;
END CHEN_TEST_PACKGE;
/
页面调用ibatis的xml配置查询结果:
<!-- 某种公告报表查询 结果集 class="java.util.HashMap"-->
<resultMap id="bulletinReportResultMap" class="java.util.TreeMap">
<result property="bizId" column="bizId"/>
<result property="bizName" column="bizName"/>
<result property="t01" column="t01"/>
<result property="t07" column="t07"/>
<result property="t14" column="t14"/>
<result property="t21" column="t21"/>
<result property="t1M" column="t1M"/>
<result property="t2M" column="t2M"/>
<result property="t3M" column="t3M"/>
<result property="t4M" column="t4M"/>
<result property="t5M" column="t5M"/>
<result property="t6M" column="t6M"/>
<result property="t1Y" column="t1Y"/>
<result property="t2Y" column="t2Y"/>
<result property="tCount" column="tCount"/>
<result property="sortNo" column="sortNo"/>
</resultMap>
<!-- 某种公告报表查询 参数 -->
<parameterMap id="bulletinReportParamMap" class="java.util.Map">
<parameter property="i_id_capital_dynamic_manage" javaType="java.lang.String" jdbcType="VARCHAR" mode="IN" />
<parameter property="o_cursor" javaType="java.sql.ResultSet" jdbcType="ORACLECURSOR" mode="OUT" />
</parameterMap>
<!-- 某种公告报表查询 调用存储过程 -->
<procedure id="queryBulletinReportList" resultMap="bulletinReportResultMap" parameterMap="bulletinReportParamMap">
{call CHEN_TEST_PACKGE.p_list_bulletin_report(?,?)}
</procedure>
java调用:
String id_capital_dynamic_manage = request.getParameter("id_capital_dynamic_manage");
Map<String, Object> paraMap = new HashMap<String, Object>();
paraMap.put("i_id_capital_dynamic_manage", id_capital_dynamic_manage);
// 调用存储过程,查询
List resultList = (List<?>) CURDUtil.queryList("queryBulletinReportList", paraMap);
页面显示jsp:
<c:if test="${not empty msgList}">
<c:forEach items="${msgList}" var="item">
<tr align="center" >
<td nowrap class="td_3" ><c:out value="${item.bizName}"/></td>
<td nowrap class="td_3" ><fmt:formatNumber pattern="#,##0.00" value="${item.t01}"/></td>
<td nowrap class="td_3" ><fmt:formatNumber pattern="#,##0.00" value="${item.t07}"/></td>
<td nowrap class="td_3" ><fmt:formatNumber pattern="#,##0.00" value="${item.t14}"/></td>
<td nowrap class="td_3" ><fmt:formatNumber pattern="#,##0.00" value="${item.t21}"/></td>
<td nowrap class="td_3" ><fmt:formatNumber pattern="#,##0.00" value="${item.t1M}"/></td>
<td nowrap class="td_3" ><fmt:formatNumber pattern="#,##0.00" value="${item.t2M}"/></td>
<td nowrap class="td_3" ><fmt:formatNumber pattern="#,##0.00" value="${item.t3M}"/></td>
<td nowrap class="td_3" ><fmt:formatNumber pattern="#,##0.00" value="${item.tCount}"/></td>
</tr>
</c:forEach>
</c:if>


猜你喜欢
- 这篇文章主要介绍了python scatter函数用法实例详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,
- 下面是效果图,这个效果图是没有开启干扰码的效果图 下面是类代码 <?php /****************************
- var sss=(String.fromCharCode(127)); var xmlhttp =
- 1查看Linux发行版本[root@typecodes ~]# cat /etc/redhat-releaseCentOS Linux re
- 前言终于下定决心学习Python了。既然从头开始,就需要认认真真。首先需要说的是,我是初学Python,这篇文章只是用于展示global和n
- 本文实例讲述了Go语言通过Luhn算法验证信用卡卡号是否有效的方法。分享给大家供大家参考。具体实现方法如下:package mainimpo
- 关于投票系统怎么样怎么样的引言就不多说,这不是毕业设计,主要说一下使用php实现投票系统,与其他普通系统一样,分为两部分,一个是管理员部分,
- 开始这是去年的问题了,今天在整理邮件的时候才发现这个问题,感觉顶有意思的,特记录下来。在表RelationGraph中,有三个字段(ID,N
- 工作中每天需要收集部门内的FR文件,发送给外部部门的同事帮忙上传,这么发了有大半年,昨天亮光一闪,为什么不做成自动化呢,于是用python实
- 如果不小心按到键盘上的Insert键的话,光标显示的就不是一条竖线,而是一个类似方块的阴影区域,比如插入一下insert键的介绍:它叫插入键
- 导包import “github.com/smartystreets/goconvey”核心API顶
- 你是一位交互设计师吗?告诉我,你具体做些什么?我是做网站设计的?听起来不够专业。我是做网页设计的,听起来……你们是做界面的……恩,好吧,我勉
- 前端模块化关注前端技术发展的各位亲们,肯定对模块化开发这个名词不陌生。随着前端工程越来越复杂,代码越来越多,模块化成了必不可免的趋势。各种标
- 最近常有厦门的客户通过网站上的联系方式加我QQ,询问网站改版的情况。几乎每日都要针对客户网站存在的问题做一番分析,然后客户以价格等其他因素结
- [概 要] 这篇文章讨论常用的"sql注入"技术的细节,应用于流行的Ms IIS/ASP/SQL-Server平台。这里
- 之前有文章,使用Android平台的OpenCV接入了视频,控制的目标是手机的摄像头,这是OpenCV的好处,使用OpenCV可以使用跨平台
- 通过学习斯坦福公开课的线性规划和梯度下降,参考他人代码自己做了测试,写了个类以后有时间再去扩展,代码注释以后再加,作业好多:import n
- 前言我们今天的任务很明确,我先系统梳理一下:1.先用Python爬取一波漂亮的美女照片;2.然后Python中炫酷的代码实现;3.最后用ma
- 1 概述在前面,我们已经对Python学习做了系统的知识梳理(Python思维导图),我们接下来把知识点分节进行细讲。这一节,我们讲解序列。
- 首先说一下我遇到的坑,生产上遇到的问题,我调度Python脚本执行并监控这个进程,python脚本运行时间远远大于python脚本中自己统计