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.

Petter Rafael

Desenvolvedor Web atua com as tecnologias Java e PHP apoiadas pelos bancos de dados Oracle e MySQL. Além dos ambientes de desenvolvimento acima possuiu amplo conhecimento em servidores Apache/Tomcat, Photoshop, Arte & Foto, Flash e mais uma dezena de ferramentas e tecnologias emergentes. Atualmente colabora com o Viablog escrevendo sobre programação e tecnologia.