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