Ordenando uma PL Table, novo exemplo
[ad#texto]
Vimos uma forma de ordenar uma PL Table utilizando um TYPE físico no banco de dados, mas e se por um motivo ou outro não pudermos criar o TYPE físico, é possível ordenar uma PL Table?
Sim, é possível, porém não é recomendado para uma PL Table com muitos registros, pois será necessário ir refazendo um FETCH dos dados e isso irá causar lentidão para grandes volumes de dados. Veja o exemplo:
declare
tab sys.owa_util.vc_arr;
type sorted_tab is table of varchar2(32767) index by varchar2(32767);
sorted sorted_tab;
id1 pls_integer;
id2 varchar2(32767);
begin
tab(1) := 'hello';
tab(2) := 'george';
tab(5) := 'no';
id1 := tab.FIRST;
WHILE id1 IS NOT NULL LOOP
sorted(tab(id1)) := tab(id1);
id1 := tab.NEXT(id1);
END LOOP;
id2 := sorted.FIRST;
WHILE id2 IS NOT NULL LOOP
dbms_output.put_line(sorted(id2));
id2 := sorted.NEXT(id2);
END LOOP;
end;
O trecho do código PL/SQL acima utilizou o OWA para possibilitar a utilização o ordenamento após a criação dos dados de forma mecânico, ou seja, iterando sobre os resultados, por isso não é recomendado para grandes volumes de dados.