Ola amigos!
Estou iniciando um estudo para por em pratica algumas funcionalidades do Oracle, uma delas é Type Object. O volume de dados que trabalho é considerável (B.I.), para que o processo fique ágil optei por utilizar o Type Object disponibilizado pelo Banco Oracle.
Abaixo segue um exemplo:
-- Criação do objeto (estrutura de dados)
Create Type OBJ_Teste
(Id number,
nome varchar2(50)
);
-- Criação da tabela de dados
Create Type TBL_Teste is table of OBJ_Teste;
Como utilizo este objeto:
Declare
xDataSet TBL_Teste := TBL_Teste();
vNome Varchar2(50);
Begin
-- Populando o objeto
for x in (select /*+ Parallel */id, nome from tabela_blablabla)
loop
xDataSet.Extend; -- incrementa um elemento no objeto
xDataSet(xDataSet.Count) := OBJ_Teste(x.Id, x.Nome); -- Popula o DataSet baseado na estrutura do objeto
end loop;
-- Lendo o objeto (na memoria)
select a.nome into vNome from [b]TABLE[/b](xDataSet) a where a.id = 45 -- Ou outro ID qualquer;
dbms_output.put_line('Nome: '||vNome);
end;
Onde pega?
Um destes objetos possui cerda de 800.000 linhas e o cursor principal (para cada linha), fará uma pesquisa nestas 800k. Isto torna o objeto muito lento (mesmo estando em memória).
A pergunta: Existe alguma forma de se criar um índice como se fosse em uma table, para acessar um elemento baseado no conteúdo do elemento para que esta pesquisa fique mais rápida.?
Nota: O objetivo é criar um ação de pesquisa rápida, baseado no object type da oracle.