terça-feira, 4 de março de 2008

TYPE … IS TABLE OF - BULK COLLECT

PL/SQL é um universo, estamos em débito com ela aqui no Estação ....
Por favor, vamos jogar os "goto pula" pra casa do landjah!!! O mundo agradece!! ... e o unverso diz AMÉM!!!

No Oracle (10i ), para persistir em memória um conjunto de registros de uma tabela qualquer para mais adiante usá-los:

Passo 1) Declare um array do tipo RowType da tabela a qual deseja armazenar:

DECLARE

  I INTEGER;

  TYPE My_TIPO_tabela IS TABLE OF <Table name> %ROWTYPE;

  V_TabTemp My_TIPO_tabela;


Passo 2) Parra carregar o vetor “V_TabTemp”:

begin
-- Test statements here
  SELECT *
    BULK COLLECT INTO V_TabTemp
  FROM 
     <table name>
  WHERE 
     <condições>



Passo 3) Imprimindo os dados:
  FOR i IN 1..2
    dbms_output.put_line(' Dado teste' || V_TabTemp.<ColumnName>(i));
  END;


Passo 4) Fazer um insert numa tabela cujo as colunas sejam idênticas as do vetor:

  FORALL I IN 1.. V_TabTemp.COUNT
    INSERT INTO <tableName> VALUES V_TabTemp.(I);


Exemplo:

  DECLARE
    type AVet is table of Clientes%rowtype;
    i integer;
    VetImportaClientes AVet;
  BEGIN
   -- ***** IMPORTAÇÃO dos Clientes
   i := 0;
   select 
     * bulk collect into VetImportaClientes
   from 
     ClientesA
   where 
     ClientesA.Tipo = 'J';

  forall i in 1.. VetImportaClientes.count
    insert into PossiveisClientesB values VetImportaClientes(i)


Nenhum comentário:

Postar um comentário

 
BlogBlogs.Com.Br