【发布时间】:2020-01-25 20:40:58
【问题描述】:
我正在创建一个程序来显示员工的最高和最低工资的 n 个数。如果我给出 5 作为输入,则查询将为我得到 5 个员工的最高和最低工资。
对于上述场景,我创建了一个包含两列的对象,如下所示
create type vrec as object(
empno number,
sal number
);
/
然后我在对象类型的帮助下创建了嵌套表,这样我就可以使用嵌套表作为输出参数来一次返回所有行。
create type vrec_type is table of vrec;
/
创建数据类型后,我创建一个如下所示的过程
create or replace procedure pro_first_last1(input in number,salary out vrec_type)
as
n number:=0;
begin
salary.extend;
select vrec(empno,sal) into salary(n) from (
select * from (select empno,sal,rank() over(order by sal asc) min_sal from emp5) where min_sal <= input
union all
select * from (select empno,sal,rank() over(order by sal asc) max_sal from emp5) where max_sal <= input);
n:=n+1;
for i in 1..salary.count
loop
dbms_output.put_line(salary(i).empno||' '||salary(i).sal);
end loop;
end;
/
程序也编译成功了。
但是当我运行下面的块来获取输出时,我得到了错误“对未初始化集合的引用”
declare
input number:=5;
salary vrec_type;
begin
pro_first_last1(input,salary);
end;
/
【问题讨论】:
标签: oracle object stored-procedures plsql nested-table