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.

Tags:,
Petter Rafael
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.

Assinar blog por e-mail

Digite seu endereço de e-mail para assinar este blog e receber notificações de novas publicações por e-mail.

Junte-se a 321 outros assinantes

Busca

outubro 2020
DSTQQSS
 123
45678910
11121314151617
18192021222324
25262728293031

Categorias