Um pequeno exemplo de Associative Array
Boa tarde pessoal !
Um camarada me pediu um pequeno exemplo de um Associative Array (Index-By Tables). Resolvi aproveitar o gancho e compartilhar com o pessoal leitor do GPO (Grupo de Profissionais Oracle).
Para quem não sabe, Associative Array são um tipo de Collection que utiliza chaves únicas (similar a hash tables em outras linguagens) para busca das informações na coleção , diferente de VArrays e Nested Tables que utilizam números sequenciais para tal.
Abaixo o código que repassei:
DECLARE
--
-- Create Table Type
--
TYPE ttg_value_table IS TABLE OF VARCHAR2(50) INDEX BY VARCHAR2(10);
--
-- Variables
--
vTable ttg_value_table;
vKey VARCHAR2(300);
BEGIN
--
-- Feed Collection
--
vTable('ASDFG01') := 'Teste de Carga 01';
vTable('ASDFG02') := 'Teste de Carga 02';
vTable('ASDFG03') := 'Teste de Carga 03';
--
-- Read Collection
--
DBMS_OUTPUT.PUT_LINE('[ BEGIN ]');
vKey := vTable.FIRST;
WHILE vKey IS NOT NULL
LOOP
DBMS_OUTPUT.PUT_LINE('[ CHAVE ] ' || vKey ||' [ DESCRICAO ] ' || vTable(vKey));
vKey := vTable.NEXT(vKey);
END LOOP;
DBMS_OUTPUT.PUT_LINE('[ END ]');
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE(TO_CHAR(SQLCODE) || ' - ' || SQLERRM);
END;
Através do exemplo acima, você poderá criar variações que atendam ás suas necessidades. Associative Arrays são excelentes para guardar em memória tabelas de domínio e qualquer outro dado que se associa através de chave simples.
Os únicos cuidados que posso citar, é que Associative Arrays são sensíveis a mudanças dinâmicas de alguns parâmetros de sessão como NLS_COMP ou NLS_SORT que podem gerar exceções nos métodos NEXT e PRIOR. Outro ponto é a utilização de datas convertidas por TO_CHAR, que podem ter o seu formato alterado pelo parâmetro NLS_DATE_FORMAT.
Os tipos RAW, LONG RAW, ROWID e CHAR não podem ser utilizados como chave.
É isso aí pessoal ! Até a próxima !
Referência