200字范文,内容丰富有趣,生活中的好帮手!
200字范文 > Oracle利用存储过程返回结果集开发报表

Oracle利用存储过程返回结果集开发报表

时间:2021-03-20 11:48:13

相关推荐

Oracle利用存储过程返回结果集开发报表

数据库|mysql教程

sql语句,Oracle,开发,程序,动态

数据库-mysql教程

3d游戏服务端源码,vscode做一个官网,ubuntu创建link,tomcat下多个项目吗,标书网爬虫,php网页特效代码,seo推广是一种付费lzw

在Oracle开发过程中,经常会遇到各种形式的报表展示,有些报表用sql语句直接是写不出来的,需要程序与sql配合着实现,但是这样写出来的报表查询速度慢,而且不利

flash粒子源码,ubuntu映射盘权限,什么是大爬虫,php php_mysql,威海seo工具lzw

html投票系统源码,u 盘安装ubuntu,卸载以配置的tomcat,node爬虫日志,php strcmp绕过,新沂市seo优化哪个平台好lzw

这里重点就是v_sql变量,将所有需要的逻辑关系写好,整体赋值给v_sql,最后打开输出游标(ds)即可。

下面是一个完整的Oracle存储过程返回结果集的例子,大家可以参考:

先看一下最终效果:

这里同时也实现了动态列、层级展示的效果。

SQL代码:

procedure pro_tj_getDate_normal_year(v_sDate varchar2,ds out ds_cur) as

d_date date;

d_eDate date;

n_diff number :=0; –年份差

n_item number :=0; –是否保存有指标

v_sql varchar2(10000);

v_sql_t varchar2(5000);

v_sql_where varchar2(5000);

v_itemCode varchar2(100);–指标类别

n_i number;

v_fields varchar2(1000);

v_year varchar(5);

begin

–计算年份差

select substr(v_eDate,1,4) – substr(v_sDate,1,4)

into n_diff

from dual;

–判断当前用户在所选公司是否保存指标

select count(*) into n_item from BP_J_TJZH_ITEM_LIST l

where _code=v_complany and l.work_code=v_user;

if n_item>0 then

v_sql_where := ‘ and i.item_code in(

select l.item_code from BP_J_TJZH_ITEM_LIST l

where _code=”’|| v_complany || ”’ and l.work_code=”’ || v_user || ”’)’;

else

v_sql_where := ”;

end if;

–判断指标类别是否为空

if v_type=” or v_type is null then

v_itemCode := v_complany || ‘-0-000001’;

else

v_itemCode := v_type;

end if;

if n_diff<=0 then –以截止接月份为准v_year := substr(v_eDate,1,4);v_sql := select i.item_code_prefix,lpad(\ \,2 * level – 2) || i.item_name as item_name,u.unit_name,t.data_value "||v_year||\" frombp_c_stat_item ileft join bp_c_measure_unit uon i.unit_id=u.unit_idleft join(select n.data_date,n.item_code_prefix,n.data_value,row_number() over(partition by to_char(n.data_date,\yyyy-mm\),n.item_code_prefix order by n.data_date desc) rnfrom bp_j_stat_ntz nwhere _code=\||v_complany||\and to_char(n.data_date,\yyyy-mm\) = \||v_eDate||\) ton i.item_code_prefix=t.item_code_prefix and t.rn=1where i.is_use=\Y\ and _code=\ || v_complany || \ || v_sql_where || start with i.item_code_prefix = \||v_itemCode || \connect by prior i.item_code_prefix=i.parent_item_codeorder SIBLINGS BY i.order_by asc;else –时间段查询d_date := to_date(v_sDate,yyyy-mm);d_eDate := to_date(v_eDate,yyyy-mm);n_i:=1;v_fields := \;v_sql := \;while d_date0 then

v_sql := v_sql||’

left join (select t.item_code_prefix,t.data_value from (

select n.data_date,n.item_code_prefix,n.data_value,

row_number() over(partition by to_char(n.data_date,”yyyy”),n.item_code_prefix order by n.data_date desc) rn

from bp_j_stat_ntz n

where _code=”’||v_complany||”’

and to_char(n.data_date,”yyyy”) = ”’||to_char(d_date,’yyyy’) ||”’

) t where t.rn=1) t’||n_i||’

on i.item_code_prefix=t’||n_i||’.item_code_prefix

‘;

else

v_sql := v_sql||’

left join (select t.item_code_prefix,t.data_value from (

select n.data_date,n.item_code_prefix,n.data_value,

row_number() over(partition by to_char(n.data_date,”yyyy-mm”),n.item_code_prefix order by n.data_date desc) rn

from bp_j_stat_ntz n

where _code=”’||v_complany||”’

and to_char(n.data_date,”yyyy-mm”) = ”’||to_char(d_date,’yyyy-mm’) ||”’

) t where t.rn=1) t’||n_i||’

on i.item_code_prefix=t’||n_i||’.item_code_prefix

‘;

end if;

v_fields := v_fields || ‘t’ || n_i || ‘.data_value as “‘||v_year||”,’;

n_i := n_i+1;

d_date :=add_months(d_date,12);

end loop;

v_sql_t := ‘select i.item_code_prefix,

lpad(” ”,2 * level – 2) || i.item_name as item_name,

u.unit_name,

‘||v_fields||’

null

from bp_c_stat_item i

left join bp_c_measure_unit u

on i.unit_id=u.unit_id

‘;

v_sql := v_sql_t || v_sql || ‘

where i.is_use=”Y” and _code=”’ || v_complany || ”’ ‘ || v_sql_where ||

‘start with i.item_code_prefix = ”’||v_itemCode || ”’

connect by prior i.item_code_prefix=i.parent_item_code

order SIBLINGS BY i.order_by asc’;

end if;

–打开游标

open ds for v_sql;

end pro_tj_getDate_normal_year;

这个sql实现了根据动态日期展示指标数据,很实用哦。如果大家有其他更好的办法可以一起讨论。

原文地址:

本文出自 “IT独行者” 博客,,请务必保留此出处

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。