Page tree
Skip to end of metadata
Go to start of metadata

Oracle数据库的存储过程主要用于更新数据,而报表数据集要求返回表状数据,所以下面的步骤实际是定义和使用Oracle的自定义函数。

(1)定义对象(object)类型

根据数据集字段结构定义一个object类型,以HR.JOBS表为例:

create type job_obj
is object
(
 JOB_ID varchar2(10)
 ,JOB_TITLE varchar2(35)
 ,MIN_SALARY number(6,0)
 ,MAX_SALARY number(6,0)
)

(2)定义表(table)类型

create type job_table is table of job_obj

(3)定义函数(function)

create or replace function fun_jobs(p1 IN number) return job_table
is
  l_jobs_tab job_table := job_table();
  n integer := 0;
begin
for r in (select * from JOBS where MIN_SALARY > p1)
loop
  l_jobs_tab.extend;
  n := n + 1;
  l_jobs_tab(n) := job_obj(r.JOB_ID, r.JOB_TITLE, r.MIN_SALARY, r.MAX_SALARY);
end loop;
  return l_jobs_tab;
end;

其中p1是参数,请注意函数声明中的参数定义 (p1 IN number) 以及在函数体中的具体使用 (where MIN_SALARY > p1,参数名p1之前没有冒号!)

(4)在报表数据集的定义中使用Oracle自定义函数

在报表设计器中,定义数据集时,查询语句要写成这样:

select * from table (fun_jobs( :p1 ) )

其中:

select * from table 是固定内容。

fun_jobs 是Oracle自定义函数名。

:p1 是数据集参数。


附件是一个示例报表模板,请修改数据源连接信息后预览。

orcl-sp.rdlx


  • No labels