Ordenando uma PL Table na criação do índice
[ad#texto]
Já vimos duas formas de ordenar uma PL Table no Oracle, uma utilizando um TYPE físico no banco de dados e outro sem esta necessidade, mas existe uma forma melhor?
Sim, existe. Afinal o PL/SQL é uma caixinha de surpresas.
A saída então é forçar os registros serem ordenados na hora de sua criação, de forma automática, sem a necessidade de nenhum reprocesso ou iteração posterior, assim economizamos recursos e melhoramos a performance da nossa aplicação. Veja o exemplo do código PL/SQL abaixo:
declare
vIndex number := 0;
indax varchar2(30);
cursor minhaT is
select *
from minhaTabela;
type tipoTabela is
record(meuCampo1 minhaTabela.campo1%type
,meuCampo2 minhaTabela.campo2%type
,meuCampo3 minhaTabela.campo3%type);
type tipoTab is table of tipoTabela index by varchar2(30);
meuTipo tipoTab;
begin
for idx in minhaT loop
vIndex := vIndex + 1;
indax := idx.meuCampo + idx.meuCampo10 + vIndex;
meuTipo(indax).meuCampo1 := idx.meuCampo1;
meuTipo(indax).meuCampo2 := idx.meuCampo2;
meuTipo(indax).meuCampo3 := idx.meuCampo3;
end loop;
end;
O que este PL/SQL faz?
Primeiro ele define um CURSOR qualquer e cria um TYPE lógico com os campos baseados na tabela que irá os alimentar (CURSOR), temos também duas variáveis, uma será o índice da PL Table e a outra será o indexador deste índice.
Em seguida abrimos o CURSOR em um LOOP e vamos incrementando o indexador e logo após concatenamos os campos meuCampo e meuCampo10 junto com a variável que é o indexador, este é o passo mais importante, pois neste exemplo queremos ordenar os registros da PL Table por meuCampo seguido de meuCampo10, criando um índice desta forma ao gravar os registros na PL Table eles já vão ficando ordenados, simples assim.
Com esta técnica não é preciso criar os registros na PL Table para só depois ordenar, tudo isso é feito em uma etapa só.