贝克汉姆
作者贝克汉姆·2012-03-02 12:46
软件开发工程师·IBM

2.3.6.3 基于存储过程的查询主题

字数 2280阅读 4942评论 20赞 20
2.3.6.3 基于存储过程的查询主题
  我们可以从关系型数据库里导入一个存储过程来创建Stored Procedure查询主题,但仅仅支持用户定义的存储过程,而不支持system stored procedure。同时,仅支持IN参数,而不支持Output参数。对于Data Query而言,存储过程必须返回一个结果,也就是带有select语句,但同时允许在select语句前加入 Insert/Update/delete等操纵语言;若脱离‘查询’概念就Data Modification而言,储存过程仅仅包含操纵语言,但不返回任何信息,比如在Event Studio。
  首先我们在应用数据库里定义一个存储过程,用于添加新纪录立即显示结果:
CREATE PROCEDURE GOSALES.TEST_PRODUCT
  @product_date_IN datetime,  @type_code_IN integer, 
  @color_code_IN integer,  @size_code_IN integer, @cost_IN integer
AS
INSERT INTO PRODUCT_PROC
(product_date,product_type_code, product_color_code, product_size_code, production_cost)
values (@product_date_IN,@type_code_IN,@color_code_IN,@size_code_IN,@cost_IN);
SELECT product_date,product_type_code, product_color_code, product_size_code, production_cost
FROM gosales. product_proc;
GO

操作步骤:
1、新建基于存储过程的查询主题

(2.3.6.3 create procedure query)
2、定义存储过程和参数
图中A:
编辑Stored Procedure Name;图中B:选择存储过程操作类型,这里我们选择Data Query;图中C:重置Data Source;
图中D:显示存储过程的语法格式;图中E:
显示存储过程所带参数列表(查看参数Mode、数据类型、格式,当然您可以在Edit Argument里修改它们,如图2.3.6.3 Edit Argument);图中F:设置参数值,这里我们引用FM里的参数宏,即动态参数,如#prompt('product_date','datetime')#。

(2.3.6.3 Query Definition)
3、编辑参数值
图中A部分,参数名称、数据类型、大小等都可以重新修改;图中B部分,用于设置参数值,可以是 常量值亦可动态参数:点击Insert Macro进行编辑。

(2.3.6.3 Edit Argument)
这里,我们设置动态参数,如#prompt('type_code','integer')#等,如下图所示:

(2.3.6.3 parameter'values setting)
4、测试存储过程
然后切换至Test页-->Test Sample-->提示输入动态参数值,如下图

(2.3.6.3 test procedure query and input values)
该查询会执行插入到数据库表中立即返回新现有表数据的结果,返回结果如下:

(2.3.6.3 test results)
切换至Query Information里查看生成的SQL语句信息,如下图

(2.3.6.3 Query Informations)
5、设置维度表信息,如下模型:

(2.3.6.3 Query Model)
6、发布模型后到Report Studio里创建报表,如下图

(2.3.6.3 Selected query subjects)

(2.3.6.3 formatting report studio)
7、运行Cognos Viewer,输入相应的参数提交后,图中参数部分所选值被添加到了数据表中,立即显示现有的记录信息,显示结果如下

(2.3.6.3 run report showing)
当然如果您感兴趣的话可以对存储过程进行拓展,如图中Operation flag:Insert、Update、Delete,给存储过程增加一个操作参数标记,形成一个多功能查询主题。如此您既可以添加、修改、删除纪录亦可仅查询现有数据信息。
  至此,Query Subjects的三种类型(Data Source Query,Model Query和Stored Procedure Query)已经讲解完毕。前两种是最基本的也是被广泛使用的查询主题,这里我们推荐使用前两种方法。若遇到查询量较大、须对数据库进行操作的时候,我们使用Stored Procedure Query,从而将执行负载交予数据库端执行,提高查询性能,但在正常情况下,前两种往往比存储过程查询性能更好、更简便易处理。在我们的查询主题中,查询项仅仅是基于数据库导入的对象生成的,若我们需要新设置数据库中不存在的查询项,即caculation、和一些过滤信息改如何进行科学的操作呢,请关注下一节 
2.3.7为查询主题添加业务规则

如果觉得我的文章对您有用,请点赞。您的支持将鼓励我继续创作!

20

添加新评论20 条评论

shooter20123shooter20123软件开发工程师CPIC
2013-09-13 14:07
infomix存储过程支持吗?返回结果集
wenshao600wenshao600其它广州南天
2013-06-13 15:58
zzphapy: 我写了一个单值返回的function, 不能导入,是不是和存储过程一样,一定要表形式多值返回的才可以导入
试试用返回一个游标结果集,单个,多个都通用吧
zzphapyzzphapy软件开发工程师Arvato
2012-08-23 17:40
我写了一个单值返回的function, 不能导入,是不是和存储过程一样,一定要表形式多值返回的才可以导入
贝克汉姆贝克汉姆软件开发工程师IBM
2012-08-22 09:15
zzphapy: 不知道oracle的function能不能调用,还是需要把function改为存储过程,不知道能不能实现使用报表页面里刷出来的数据直接使用function,运算产生的结果生成另一列显示在
oracle 库函数和自定义函数 可直接引入跟随Package一起发布
zzphapyzzphapy软件开发工程师Arvato
2012-08-21 10:19
不知道oracle的function能不能调用,还是需要把function改为存储过程,不知道能不能实现使用报表页面里刷出来的数据直接使用function,运算产生的结果生成另一列显示在后面
贝克汉姆贝克汉姆软件开发工程师IBM
2012-07-10 18:25
guyuean: 2.3.6.3看不到图啊
换一个浏览器试试
guyueanguyueanBI开发工程师国网信通亿力科技股份有限公司
2012-07-10 13:58
2.3.6.3看不到图啊
theonlywaytheonlyway系统架构师泰德煤网股份有限公司
2012-05-17 06:39
崇拜

2012-04-09 14:22
值得学习
xzl1203xzl1203软件开发工程师宇信易诚
2012-03-21 11:46
贝克汉姆: 用的是SQL Server 比较简单,若是Oralce,db2就必须用cursor
贝克汉姆贝克汉姆软件开发工程师IBM
2012-03-20 16:08
xzl1203: 为什么你的PROCEDURE 没有返回数据 FM能test出来? SQLSERVER?
oracle环境下,必须设定一个cursor 返回..
用的是SQL Server 比较简单,若是Oralce,db2就必须用cursor
xzl1203xzl1203软件开发工程师宇信易诚
2012-03-20 14:53
为什么你的PROCEDURE 没有返回数据 FM能test出来? SQLSERVER?
oracle环境下,必须设定一个cursor 返回..
hankinghankingBI开发工程师lvbang
2012-03-09 15:53
高手啊。。。。
aqiang_007aqiang_007软件开发工程师longtop
2012-03-07 13:49
这个太不错了
recallrecall软件架构设计师NTT DATA
2012-03-07 13:11
贝克汉姆: 游标 cusor跟是否使用temp_table、table 有直接关系么?
之前遇到一个情况是使用游标的,但是FM中使用会报错,数据读取不到。如果将游标的数据写入临时表或实体表,直接取表的话就没有问题。
cooljwjcooljwjBI技术总监ssss
2012-03-07 12:59
期待下一期、、
贝克汉姆贝克汉姆软件开发工程师IBM
2012-03-06 23:19
recall: 如果使用游标的话是否需要写入临时表或实体表中?
游标 cusor跟是否使用temp_table、table 有直接关系么?
recallrecall软件架构设计师NTT DATA
2012-03-06 15:03
如果使用游标的话是否需要写入临时表或实体表中?
yyj1827yyj1827软件开发工程师hn
2012-03-06 08:57
真强!!!
wangjingyiwangjingyi软件开发工程师xxx
2012-03-02 14:46
一直等着小贝的更新呢~
Ctrl+Enter 发表

作者其他文章

相关问题

相关资料

X社区推广