Ordenando uma PL Table

[ad#texto]

Em vários casos precisamos lançar mão das famosas PL Table no Oracle, os motivos são diversos, e em vários casos não é possível ordená-las no momento da gravação de dados, vamos então ver como ordenar uma PL Table utilizando alguns recursos interessantes do PL/SQL.

Este caso de uso irá precisar de um Type físico, ou seja, um Type registrado diretamente no banco de dados, um Type registrado somente na sua aplicação PL/SQL (lógico) não irá funcionar.

Primeiro criamos o Type no Oracle:

create or replace type meuTipo as table of varchar2(25);

Em seguida já aplicamos a lógica para criar os dados e ordena-los na sequência:

declare
 tipoCR    meuTipo := meuTipo();

begin
 for dados in ( select username from all_users where rownum < 100 ) loop
  tipoCR.extend;
  tipoCR(tipoCR.count) := dados.username;
 end loop;

 for dados in ( select ta.column_value nomes from THE ( select cast( tipoCR as meuTipo ) from dual ) ta order by nomes ) loop
  dbms_output.put_line( dados.data );
 end loop;
end;

O que o código PL/SQL acima fez?

Ele primeiro instanciou o meu Type criado anteriormente (meuTipo), feito isso ele fez um SELECT na tabela ALL_USERS e foi atribuindo de forma não ordenada, após a PL Table populada ele utilizando um SELECT no próprio Type fez a ordenação, note a flexibilidade desta solução, foi feito um ORDER BY direto na PL TABLE dentro de um laço FOR, se fosse necessário seria também possível utilizar uma cláusula WHERE.

Como o exemplo utiliza os próprios recursos do Oracle para realizar o SORT ele tende a ser veloz e eficiente.

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.