cognos使用存储过程
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1)创建自定义类型包
create or replace package cc11.pkg_my_types is
-- Author : SONGJIE
-- Created : 2008-9-18 14:42:08
-- Purpose : 自定义的类型
-- Public type declarations
type cursorType is ref cursor; --定义游标结果集
end pkg_my_types;
2)创建返回结果集的函数
create or replace function cc11.f_get_cur_result(intID NUMBER ) return cc11.pkg_my_types.cursorType IS rc cc11.pkg_my_types.cursorType;
sqlstr VARCHAR2 (500);
BEGIN
if intID=0then
--静态测试,直接用select语句直接返回结果
open rc for select prod_id,created_date,state,block_reason from cc11.prod;
else
--动态sql赋值,用:w_id来申明该变量从外部获得
sqlstr := 'select prod_id,created_date,state,block_reason from cc11.prod where prod_id>:aa';
--动态测试,用sqlstr字符串返回结果,用using要害词传递参数
open rc for sqlstr using intid;
end if;
return rc;
END f_get_cur_result;
3)创建返回结果集的存储过程
create or replace procedure p_test_get_prod(initID number ,rc out cc11.pkg_my_types.cursorType ) as
sqlstr VARCHAR2 (500);
begin
if initID=0then
open rc for select prod_id,created_date,state,block_reason from cc11.prod;
else
sqlstr:='select prod_id,created_date,state,block_reason from cc11.prod where prod_id>:aa';
open rc for sqlstr ;
end if;
end;
4)在sqlplus中用存储过程回显结果集的方法:
var iable cc refcursor // var cc refcursor
exec cc11.p_test_get_prod(0,:cc)
print cc
--注意:此存储过程的方法不能在pl/sql Developer 中实现
5)用函数回显结果集的方法
select pkg_test_get_prod.get(0) from dual
select cc11.f_get_cur_result(100) from dual;
6)在cognos中以存储过程作为数据源来生成报表
重点:数据源的属性要改设置(设置成下图所示的结果)
(说明:cognos创建报表的其他操作步骤这里不作详细的说明,重点是指出需要引起注意的配置问题)
说明:
Query Processing 和 Rollun Processing要改成 Local选项,否则发布模型时会报错(如下)
注意以下文字
测试的例子:
包的路径
生成的报表:get_prod_from_procedure