您好,前几天我是你Oracle的存储过程的也遇到问题,然后咨询了我们研发,这是研发刚刚给的一个使用办法。我还没来得及验资,我先发给你你看看。我这边等下再去验证
- 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 是数据集参数。
复制代码
|