--- Em oracle_br@yahoogrupos.com.br, Júlio César Corrêa <juliotubi...@...> 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 <mandaproser...@...> > > > 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;