

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:

Nota: O objetivo é criar um ação de pesquisa rápida, baseado no object type da oracle.