› Fóruns › SQL e PL/SQL › Erro ao usar o comando BULK COLLECT
- Este tópico contém 2 respostas, 2 vozes e foi atualizado pela última vez 17 anos, 8 meses atrás por
paribe.
-
AutorPosts
-
17 de setembro de 2008 às 6:23 pm #82731
Kamikase
ParticipanteOpa pessoal, blz?
To com um problema aqui q ta me dando dor de cabeça desde sexta-feira e ñ consegui ninguém q conseguisse identificar o erro dentro da empresa, então to apelando XP
Estou com uma melhoria de performance em uma package, onde o cliente quer q o tempo de execução seja diminuido de 7 para 3 horas.
Para isso, decidi adotar o uso de tabelas temporárias para fazer o JOIN entre as tabelas usando uma massa menos de dados, pois são 3 tabelas gigantescas.
De inicio eu estava usando um for simples no cursor, mas a execução ainda estava meio lenta, porque a transação era commitada a cada linha inserida na tabela temporária, ai me aconselharam usar o comando BULK COLLECT. A partir dai começou minha dor de cabeça.Estou implementando o código da seguinte forma:
OPEN C_CCONTACT(P_DATA_CORTE_INICIO, P_DATA_CORTE_FIM);
LOOPFETCH C_CCONTACT BULK COLLECT INTO REC_CC LIMIT 10000;
FORALL i IN REC_CC.FIRST .. REC_CC.COUNT
INSERT INTO BSCS_CLARIFY_TMP_CCONTACT
VALUES REC_CC(i);
COMMIT;
EXIT WHEN C_CCONTACT%NOTFOUND;
END LOOP;No primeiro fetch ele passa e insere 10000 registros na tabela temporária, porém no segundo ele dá o seguinte erro:
ORA-01461: can bind a LONG value only for insert into a LONG column
Diminui o limit para 10 para ver se isso resolvia, ele inseriu 60 registros na coluna, mas na 7ª passagem pelo fetch deu o mesmo erro.
Ja descartei a possibilidade de incossitência no banco e inserção de valores em campo errado.
Me falaram pra usar um for simples com controle de commit, mas eu queria ver se eu sanava esse problema por 2 motivos:
1º. Não é apenas 1 cursor que está assim, só deu erro nele porque ele é o primeiro, então se eu modificar somente ele o risco de dar erro nos outros é alto, e vai dar muito trabalho modificar o código inteiro.
2º. Assim eu aprendo e aumento minha experiência
Bom, vlw povo o/
18 de setembro de 2008 às 12:45 am #82736Kamikase
ParticipanteFiz isso com controle de commit em um for simples e deu certo, só q ficou um monstrinho, pq a tabela tem 72 campos.
Por enquanto vou deixar assim, mas caso alguém saiba q problema q é esse q eu descrevi, por favor me falem.vlw ai pela atenção o/
20 de setembro de 2008 às 1:03 am #82785paribe
Participantete passei uns exemplos deu certo..
abs
-
AutorPosts
- Você deve fazer login para responder a este tópico.
› Fóruns › SQL e PL/SQL › Erro ao usar o comando BULK COLLECT