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

浏览: 2706

 我们可以从关系型数据库里导入一个存储过程来创建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、新建基于存储过程的查询主题

Clipboard Image.png

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')#。

Clipboard Image.png

3、编辑参数值

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

Clipboard Image.png

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

Clipboard Image.png

4、测试存储过程

然后切换至Test页-->Test Sample-->提示输入动态参数值,如下图

Clipboard Image.png

该查询会执行插入到数据库表中立即返回新现有表数据的结果,返回结果如下:

Clipboard Image.png

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

Clipboard Image.png

5、设置维度表信息,如下模型:

Clipboard Image.png


6、发布模型后到Report Studio里创建报表,如下图

Clipboard Image.png

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

Clipboard Image.png

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

推荐 0
本文由 贝克汉姆 创作,采用 知识共享署名-相同方式共享 3.0 中国大陆许可协议 进行许可。
转载、引用前需联系作者,并署名作者且注明文章出处。
本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责。本站是一个个人学习交流的平台,并不用于任何商业目的,如果有任何问题,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。

0 个评论

要回复文章请先登录注册