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