Я создаю процедуру для отображения n номера максимальной и минимальной зарплаты для сотрудника.Если я введу 5 в качестве входных данных, запрос получит максимальную и минимальную зарплату 5 для сотрудника.
Для описанного выше сценария я создал объект с двумя столбцами, как показано ниже
create type vrec as object(
empno number,
sal number
);
/
Затем я создал вложенную таблицу с помощью типа объекта, чтобы я мог использовать вложенную таблицу в качестве параметра out для возврата всех строк за один короткий.
create type vrec_type is table of vrec;
/
После создания типа данных imсоздание процедуры, как показано ниже
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;
/