Pular para o conteúdo

Exemplo de Associative Array: Uma solução eficiente para buscar informações na coleção

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

Sergio Willians

Sergio Willians

Sergio Willians é o fundador do GPO (Grupo de Profissionais Oracle) e possui quase 30 anos de experiência em tecnologias Oracle, sendo especialista em desenvolvimento Forms/Reports, PL/SQL e EBS (E-Business Suite) nos módulos Receivables, Payables e General Ledger. Atualmente trabalha na Scania Latin America, onde se dedica à área de integração de dados com Confluent Kafka. Sua paixão é compartilhar conhecimento com a comunidade Oracle, contribuindo para o crescimento e a excelência da plataforma.

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

plugins premium WordPress