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.
ViamaisBLOG
Privacy Overview

This website uses cookies so that we can provide you with the best user experience possible. Cookie information is stored in your browser and performs functions such as recognising you when you return to our website and helping our team to understand which sections of the website you find most interesting and useful.