myodo.ru
Мудрец
(12806)
3 года назад
сортировать набор вручную на паскале в оракуле - это как на современном авиазаводе делать самолет напильником из дерева, используя программируемый многоосевой фрезерный станок в качестве верстака. преподаватель, который дает такое задание, не вполне профпригоден. в современных условиях низкоуровневую сортировку вообще имеет смысл реализовать только на ассемблере.
тип dbms_sql.number_table - уже индексированный набор, можно выбирать из него.
а проще так:
select column_value f from table(ta_number(1,2,3,4,5)) order by column_value desc
Оформить в виде кода хранимой процедуры, на вход которой подается массив, возвращается массив.
Параметры
p_asc – сортировка по убыванию или по возрастанию (по умолчанию по возрастанию)
p_nulls_last – значения NULL в конце списка (по умолчанию они больше бОльшего)
declare
p_arr dbms_sql.Number_Table;
i pls_integer;
procedure do_sort(p_arr in out dbms_sql.Number_Table, p_asc in boolean default null, p_nulls_last in boolean default null) is
begin
return ; -- тут код сортировки
end;
begin
p_arr(-1) := 0;
p_arr(0) := -2;
p_arr(1) := 10.1;
p_arr(2) := null;
p_arr(3) := 10.1;
p_arr(4) := -1;
p_arr(6) := null;
do_sort(p_arr);
i := p_arr.first;
while i is not null loop
dbms_output.put_line('arr('||i||') = '||nvl(to_char(p_arr(i)), 'null')||';');
i := p_arr.next(i);
end loop;
end;