Pular para o conteúdo
Visualizando 3 posts - 1 até 3 (de 3 do total)
  • Autor
    Posts
  • #82731
    Kamikase
    Participante

      Opa 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);
      LOOP

      FETCH 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 :mrgreen:

      Bom, vlw povo o/

      #82736
      Kamikase
      Participante

        Fiz 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/

        #82785
        paribe
        Participante

          te passei uns exemplos deu certo..

          abs

        Visualizando 3 posts - 1 até 3 (de 3 do total)
        • Você deve fazer login para responder a este tópico.
        plugins premium WordPress