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 条评论
2013-09-13 14:07
2013-06-13 15:58
2012-08-23 17:40
2012-08-22 09:15
2012-08-21 10:19
2012-07-10 18:25
2012-07-10 13:58
2012-05-17 06:39
2012-04-09 14:22
2012-03-21 11:46
2012-03-20 16:08
oracle环境下,必须设定一个cursor 返回..
2012-03-20 14:53
oracle环境下,必须设定一个cursor 返回..
2012-03-09 15:53
2012-03-07 13:49
2012-03-07 13:11
2012-03-07 12:59
2012-03-06 23:19
2012-03-06 15:03
2012-03-06 08:57
2012-03-02 14:46