BI中sql数据源调用存储过程示例(oracle)

4987
6

tangmq 数据达人Lv4

发表于2019-12-10 16:30

楼主
本帖最后由 tangmq 于 2019-12-10 16:38 编辑

声明:由于本人是数据库残障人士,所以写的例子相对简单,目的在于传达存储过程如何实现在BI的sql数据源中调用的过程;存储过程的高深问题暂且抱歉,请另行百度!

>>需求目标<<
BI报表数据源,为存储过程的结果集。存储结果集有两个输入参数,从BI计算参数传入;
即:BI选择计算参数,参数值传给存储过程,显示参数所选择的数据,表格设计如下图:



>>第一步:自定义游标类型<<

  1. CREATE OR REPLACE PACKAGE types
  2. AS
  3.     TYPE ref_cursor IS REF CURSOR;  
  4. END;
复制代码
上文注解: ref_cursor为游标类型名称;

>>第二步:定义存储过程<<
  1. create or replace procedure tmq_testsql(p1 in varchar,p2 in varchar,P_Result OUT types.ref_cursor)
  2. as
  3. begin
  4.   OPEN P_Result FOR
  5. select a.xzqh xzqh ,a.bbq_ bbq,sum(a.fy) je  from fact_fy a where  substr(a.xzqh,1,2)= p1 and a.bbq_=p2  group by a.xzqh,a.bbq_;
  6. end tmq_testsql ;
复制代码


上文注解:
存储过程名:tmq_testsql
传入参数定义:p1 in varchar,p2 in varchar (原因,报表上有两个计算参数 @xzqh @bbq  需要传入存储过程)
定义输出游标名:P_Result OUT types.ref_cursor (此处ref_cursor,为上文自定义游标类型名);
                                 P_Result是一个输出参数,返回一个结果集,下面的分析需要对这个返回的结果集进行展示;
定义游标结果集:OPEN P_Result FOR  后面跟sql语句,将sql查询的结果,赋予给输出游标P_Result
SQL主体:select 语句就不多做阐述,就是返回的结果集的查询语句,需要注意的是where条件后面,需要把输入参数 p1 p2,带入到过滤中;

>>第三步:BI添加sql数据源<<
如下图所示,添加一个sql数据源,定义:{call tmq_testsql('<#=left(@xzqh,2)#>','<#=@bbq#>',$cursor)}

p1:接收行政区划参数值<#=left(@xzqh,2)#>
p2:接收年月参数值<#=@bbq#>
(p1 p2 即时上文存储过程中所定义的输入参数)

>>第四步:BI报表取数和计算结果预览<<
报表设计步骤,与普通取数定义雷同,设计结果如下:


选择河北省2014年9月,就可以发现,调用存储过程的时候{call tmq_testsql('13','201409',$cursor)}传入了参数,并按照要求返回了结果,如下图

最近看过此主题的会员

esen_4PV2UY8IWC

alimu

esen_4Y3L5ADO80

hee

v笑向前走

刘玉胜

woailongmaode

esen_4YNOSJ2G1Q

esen_4RRUNSX5AB7E

esen_4ZJ33CV4QQ

axin

wxw

陈平安

莱卡

6个回答

只看楼主

tangmq 数据达人Lv4

发表于2019-12-25 11:06

只看该作者

取消 关注该作者的回复

5#

本帖最后由 tangmq 于 2020-1-6 17:37 编辑

【BI47】如果是sql server 数据库,需要在数据库驱动包里面要加个class文件
SqlExecuter .rar (5.72 KB, 下载次数: )

war包下,lib文件夹下,esen_jdbc_1.2.4.jar 中的 \com\esen\jdbc\SqlExecuter.class
调用语句:{call vip_sale2000('<#=@begindate#>','<#=@enddate#>')}

【BI46】的补丁,请前往7楼


【BI42】如果是该版本需要调用SqlServer数据库的存储过程,需要打两处补丁

如上图,zip补丁打入到war包中(打补丁方法,解压zip,将补丁文件替换到war包同路径下的同名文件)
            class补丁,打到war包lib下的,esen_jdbc_1.2.3.jar 中的 \com\esen\jdbc\SqlExecuter.class
补丁附件: BI42-SqlServer数据库调用存储过程.zip (22.25 KB, 下载次数: )


进阶的小木桩 数据达人Lv4

发表于2019-12-11 09:50

只看该作者

取消 关注该作者的回复

沙发

社区小辣妹 小试身手Lv3

发表于2019-12-11 13:44

只看该作者

取消 关注该作者的回复

板凳

学习了!!

zhangs 初学数据Lv2

发表于2019-12-12 17:53

只看该作者

取消 关注该作者的回复

地板

汤姐威武

leiz 小试身手Lv3

发表于2020-1-6 17:29

只看该作者

取消 关注该作者的回复

6#

本帖最后由 leiz 于 2020-1-6 17:30 编辑

【BI46】如果是sql server 数据库,需要在数据库驱动包里面要加个class文件 SqlExecuter.zip (5.9 KB, 下载次数: )


war包下,lib文件夹下,esen_jdbc_1.2.4.jar 中的 \com\esen\jdbc\SqlExecuter.class

leiz 小试身手Lv3

发表于2020-1-6 17:32

只看该作者

取消 关注该作者的回复

7#

tangmq 发表于 2019-12-25 11:06
【BI47】如果是sql server 数据库,需要在数据库驱动包里面要加个class文件
war包下,lib文件夹下,esen_jd ...

【BI46】如果是sql server 数据库,需要在数据库驱动包里面要加个class文件 SqlExecuter.zip (5.9 KB, 下载次数: )
替换war包下,lib文件夹下,esen_jdbc_1.2.4.jar 中的 \com\esen\jdbc\SqlExecuter.class

登录后可回答问题,请登录注册

快速回复 返回顶部 返回列表

小时

全天响应

分钟

快速处理问题

工程师强势助力

明星产品
解决方案
联系合作

400咨询:400-0011-866

技术支持QQ:400-0011-866(工作日9:00-18:00)

产品建议邮箱yixin@esensoft.com

关注我们

扫TA学习更多干货

一对一专家交流

版权所有© 2006-2024 北京亿信华辰软件有限责任公司 京ICP备07017321号 京公网安备11010802016281号