gpt4 book ai didi

Oracle 查询存储过程做横向报表的方法

转载 作者:qq735679552 更新时间:2022-09-29 22:32:09 25 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章Oracle 查询存储过程做横向报表的方法由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

因为要牵扯到小计,所以需要计算两次.

想法:

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>

最后此篇关于Oracle 查询存储过程做横向报表的方法的文章就讲到这里了,如果你想了解更多关于Oracle 查询存储过程做横向报表的方法的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com