[oracle_br] Re: BULK COLLECT com DBLINK

2009-03-12 Por tôpico sergio_oracle
--- Em oracle_br@yahoogrupos.com.br, Júlio César Corrêa  
escreveu
>
> O seu erro mostra outra coisa.Que você está tentando inserir um valor null
> em uma coluna not null.
> Verifique se está correto este insert nas colunas corretas e coisa e tal.Se
> persistir ae pode ser outra coisa(bug) não sei.
> Mas por enquanto o erro é outro.
> 
> 2009/3/11 sergio_oracle 
> 
> >   Estou tendo dificuldade ao usar o FORALL para inserir registros em uma
> > tabela em outro banco Oracle, ligados por dblink
> > O erro sempre apresentado é ORA-01400 cannot insert NULL
> >
> > Como preciso enviar dados de uma tabela para outra em grandes quantidades,
> > estava pensando em usar o bulk collet, mas parece que não funciona bem
> > quando se usa em conjunto com dblink. Fiz um teste em uma tabela local do
> > banco e funcionou perfeitamente.
> >
> > Antes estava usando o INSERT com SELECT e funciona de forma bem rápida,
> > cerca de 50.000 em 7 segundos.
> > Mas como a quantidade de registros pode chegar a 2.000.000, comecei a usar
> > CURSOR e, inserindo linha a linha, os mesmos 50.000 demorou 2 minutos.
> >
> > Alguma sugestão ou exemplo de como posso fazer essa transmissão de
> > registros de forma rápida?
> >
> >  
> >
> 
> 
> 
> -- 
> Júlio César Corrêa
> IS Technologist - Oracle DBA
> http://jccorrea.blogspot.com
> 
> "To stay competitive in the tech industry, never stop
> learning. Always be on the lookout for better ways of
> doing things and new technologies. Our industry does
> not reward people who let themselves stagnate"
> –John Hall, Senior Vice President, Oracle University
> 
> 
> [As partes desta mensagem que não continham texto foram removidas]
>

Pois é Júlio, o erro é estranho, pois acho que estou fazendo tudo certo.

Eu crio um tipo tabela index by de acordo com um cursor que possui os mesmos 
campos e na ordem da tabela destino.
Uso o bulk collect para carregar esta tabela. 
Até aí ocorre tudo bem e depois uso :

FORALL i IN 1..t_movimentos.count
INSERT INTO movimen...@dbl_homolog
 VALUES t_movimentos(i);

Acontece que se ao invés do forall, eu usar o for "normal" os registros são 
inseridos perfeitamente, assim:
FOR i IN 1..t_movimentos.count
LOOP
INSERT INTO movimen...@dbl_homolog
 ( campo_1..campo_n)
VALUES ( t_movimentos(i).campo_1 .. 
 t_movimentos(i).campo_n)
END LOOP;



[oracle_br] BULK COLLECT com DBLINK

2009-03-11 Por tôpico sergio_oracle
Estou tendo dificuldade ao usar o FORALL para inserir registros em uma tabela 
em outro banco Oracle, ligados por dblink
O erro sempre apresentado é ORA-01400 cannot insert NULL

Como preciso enviar dados de uma tabela para outra em grandes quantidades, 
estava pensando em usar o bulk collet, mas parece que não funciona bem quando 
se usa em conjunto com dblink. Fiz um teste em uma tabela local do banco e 
funcionou perfeitamente.

Antes estava usando o INSERT com SELECT e funciona de forma bem rápida, cerca 
de 50.000 em 7 segundos.
Mas como a quantidade de registros pode chegar a 2.000.000, comecei a usar 
CURSOR e, inserindo linha a linha, os mesmos 50.000 demorou 2 minutos.

Alguma sugestão ou exemplo de como posso fazer essa transmissão de registros de 
forma rápida?