Я создаю процедуру для отображения 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;
/