Friend, vamos por partes aí : primeiro de tudo, já que vc 
diz "migração de dados de tabelas idênticas", eu entendo que os nomes 
das tabelas E os nomes das colunas são os mesmos tanto no bd origem 
quanto no destino, confere ??? Sendo assim, por mais divertido que 
seja vc brincar com código, administrativamente a maneira rápida de 
se fazer esta tarefa é montar e rodar um script tipo :

set term off feedback off verify off pages 0 lines 500 trimspool on 
head off
spool tabs_a_inserir.sql
select 'INSERT INTO ' || TABLE_NAME ||'@nomedodblink (select * from ' 
|| TABLE_NAME || ');'
  from dba_tables
 where ... condiçõesqueidentificamastabs....;
exit


==> e daí vc roda o script tabs_a_inserir.sql, cabou, morreu, fim de 
papo - no máximo, se desejado quebre o script em n partes para as 
rodar em sessões simultâneas de plus, faça INSERT /*+ APPEND */ se as 
tabelas estão em nologging, PARALLEL se for mas a base é essa aí de 
cima.... 

Caso vc REALMENTE queira fazer via programação, como sempre quando se 
fala em SQL dinâmico vc VAI ter que codificar PRACAS, não é muito 
simples, E ainda além disso vc VAI ter que conviver com um monte de 
parses extras. O primeiro ponto é que vc não sabe o número de colunas 
pra cada SQL gerado, então ao invés de EXECUTE IMMEDIATE vc vai ter 
que usar DBMS_SQL, procure em http://asktom.oracle.com por DYNAMIC 
DYNAMIC SQL que vc acha alguns textos. Depois, vc vai ter o problema 
de que vais ter colunas de diversos datatypes, ou vc usa ANYDATA 
(procure no asktom que vc acha algo), ou abre uma série de IFs, 
provavelmente recuperando o datatype de cada coluna na 
DBA_TAB_COLUMNS.  

[]s

 Chiappa
 
--- Em oracle_br@yahoogrupos.com.br, José Resende Neto 
<[EMAIL PROTECTED]> escreveu
>
> Pessoal,
> 
> alguém pode me ajudar com esse problema da minha migração de dados 
descrita
> no email abaixo?
> 
> Obrigado.
> Neto.
> 
> ----- Original Message ----- 
> From: "ze_neto2002" <[EMAIL PROTECTED]>
> To: <oracle_br@yahoogrupos.com.br>
> Sent: Monday, April 03, 2006 11:33 AM
> Subject: [oracle_br] Migração de dados - SQL Dinamico.
> 
> 
> BANCO: Oracle9i Enterprise Edition Release 9.2.0.6.0 - 64bit
> Production
> 
> Pessoal,
> 
> estou precisando fazer uma migração de dados de tabelas idênticas de
> uma instância para outra, usando um DB link.
> 
> Eu quero fazer um código genérico. Ou seja, sem usar nomes ou tipos
> relacionados a nomes fixos de tabelas, eu poderia migrar os dados de
> todas as tabelas. Elas primeiramente serão carregadas em uma tabela
> temporária. Então eu abro um cursor (ou carrego um array) com o nome
> de cada uma e daí começo a ler os dados na outra instância e 
carregar
> na tabela final.
> 
> Tenho tabelas com muitos dados. Por isso não posso usar
> simplesmente "INSERT INTO <nome da tabela> SELECT * FROM <nome da
> tabela>@<DB_LINK>". Mesmo se eu fizesse "INSERT INTO <nome da 
tabela>
> SELECT * FROM <nome da tabela>@<DB_LINK> WHERE ROWNUM BETWEEN
> <valor_ini> AND <valor_fim>", neste caso separando o insert em 
blocos
> de 10000, por exemplo, ficaria muito lento porque teria que ler a
> tabela a cada 10000 registros. Então Pensei em fazer usando o BULK e
> FORALL.
> 
> Agora vamos aos problemas:
> 
> 1) Eu teria que jogar o que eu leio em um tipo record genérico. Eu
> não quero passar o nome da tabela fixo e nem um tipo fixo usando o
> ROWTYPE. Eu não quero algo do tipo:
> TYPE cust_rec IS TABLE OF <tabela customer>%ROWTYPE;
> 
> Qual seria a solução para o tipo genérico, onde eu poderia jogar o
> registro de qualquer tabela?
> 
> 
> 2) Tendo o tipo genérico em mãos, eu poderia começar a pensar no
> FORALL. Mas estou parado no problema de fazer um FORALL usando SQL
> dinamico, porque o nome da minha tabela de destino não é fixo. Então
> tentei:
> 
> v_sql := 'FORALL indx IN id_first..id_last '||
> 'INSERT INTO '||mig_table.table_name(i)||'
> VALUES '||mig_table.table_name(i)||'_type(indx)';
> EXECUTE IMMEDIATE v_sql;
> 
> onde mig_table.table_name(i)||'_type seria o tipo genérico do item 
1.
> Mas não funciona. Dá o erro "ORA-00900: invalid SQL statement".
> Imagino que seja porque não posso fazer o FORALL dinamicamente.
> 
> E aí, pessoal? Alguém já passou por este tipo de migração de dados
> antes? Alguma luz?
> 
> Estou no aguardo...
> Neto.
> 
> 
> 
> 
> 
> --------------------------------------------------------------------
--------
> ----------------------------------------------
> Atenção! As mensagens deste grupo são de acesso público e de inteira
> responsabilidade de seus remetentes.
> Acesse: http://www.mail-archive.com/oracle_br@yahoogrupos.com.br/
> --------------------------------------------------------------------
--------
> ----------------------------------------------
______________________________
> ____________________________________
> 
> Este Grupo recebe o apoio da SQL Magazine - 
www.devmedia.com.br/sqlmagazine
> __________________________________________________________________
> O grupo Oracle_br não aceita anexos. Quando oferecer algum arquivo, 
tenha o
> link do mesmo para evitar trafego(pedidos) desnecessário.
> Links do Yahoo! Grupos
>






--------------------------------------------------------------------------------------------------------------------------
Atenção! As mensagens deste grupo são de acesso público e de inteira 
responsabilidade de seus remetentes.
Acesse: http://www.mail-archive.com/oracle_br@yahoogrupos.com.br/ 
--------------------------------------------------------------------------------------------------------------------------__________________________________________________________________

Este Grupo recebe o apoio da SQL Magazine - www.devmedia.com.br/sqlmagazine 
__________________________________________________________________
O grupo Oracle_br não aceita anexos. Quando oferecer algum arquivo, tenha o 
link do mesmo para evitar trafego(pedidos) desnecessário. 
Links do Yahoo! Grupos

<*> Para visitar o site do seu grupo na web, acesse:
    http://br.groups.yahoo.com/group/oracle_br/

<*> Para sair deste grupo, envie um e-mail para:
    [EMAIL PROTECTED]

<*> O uso que você faz do Yahoo! Grupos está sujeito aos:
    http://br.yahoo.com/info/utos.html

 


Responder a