Pular para o conteúdo
Visualizando 7 posts - 1 até 7 (de 7 do total)
  • Autor
    Posts
  • #96506
    Fornasier
    Participante

      Caros,

      Estou tentando resolver o erro ora-06512. Todos os tópicos relacionados a este erro relatam que o mesmo acompanha uma exceção de origem e indica a linha onde o erro ocorre. Porém no meu caso tenho somente a mensagem de erro ORA-06512. Segue abaixo a mensagem de erro completa.

      ORA-06512: at line 1
      ORA-06512: at “OPSS.PG_CALCULO”, line 36207
      ORA-06512: at “OPSS.PG_CALCULO”, line 36284
      ORA-06512: at “OPSS.PG_CALCULO”, line 1861
      ORA-06512: at “OPSS.PG_CALCULO”, line 281
      ORA-06512: at line 2

      Como vocês podem perceber a package em questão é MUITO grande. E utiliza largamente o conceito de tabelas index-by, porém divididos em procedures dentro da package. Suspeito que a utilização destas tabelas esta me causando algum tipo de estouro de memória.

      Também li em alguns fóruns que este tipo de tabela libera a memória quando a procedure é encerrada, mas caso as estas procedures estejam dentro de uma package isto também acontece? Será este meu problema?
      Alguém tem alguma dica para me passar?

      Mais uma informação, caso seja executada isoladamente a procedure que esta causando erro, o erro simplesmente não acontece.

      Desde já agradeço a todos

      #96508
      jspaulonci
      Participante

        Post as intruções da linha

        ORA-06512: at “OPSS.PG_CALCULO”, line 36207
        ORA-06512: at “OPSS.PG_CALCULO”, line 36284
        ORA-06512: at “OPSS.PG_CALCULO”, line 1861
        ORA-06512: at “OPSS.PG_CALCULO”, line 281

        Error:
        ORA-06512: at line

        Cause:
        This error message indicates the line number in the PLSQL code that the error resulted.

        For example, if you had the following PLSQL code:
        declare
        v_number number(2);
        begin
        v_number := 100;
        end;

        #96509
        Fornasier
        Participante

          Blz João,

          Segue a linha e a instrução correspondente.

          281 -> SP_CALC_INDICADORES(VDATAREF)

          1861 -> SP_CALC_IND_RN30(indicador.codigo,l_classificao(i),indicador.relatorio, indicador.ordem, 0, vDataRef);

          36284 -> OPEN l_pedidos_vol(l_di, l_df);
          FETCH l_pedidos_vol BULK COLLECT
          INTO l_cod_cliente, l_cod_dv_cliente, /l_cod_regional,/
          l_cod_rede, l_cod_pos_equipe, l_tpt_pedidos_vol, l_tpt_pedidos_vol_devolvido;

          36207 -> CURSOR l_pedidos_vol(p_di DATE, p_df DATE) IS
          SELECT PDV.COD_CLIENTE AS CLIENTE,
          PDV.COD_DV_CLIENTE AS DV_CLIENTE,
          MV.cod_rede_pdv rede,
          PDV.cod_equipe_venda cod_equipe,
          SUM(CASE WHEN MCO.COD_OPER = ’01’ THEN NF.QTD_ITEM * MVP.FTR_CONVERSAO_HECTOLITRO_PROD ELSE 0 END) QTD_VOLUME_SAIDA,
          SUM(CASE WHEN MCO.COD_OPER = ’13’ THEN NF.QTD_ITEM * MVP.FTR_CONVERSAO_HECTOLITRO_PROD ELSE 0 END) QTD_VOLUME_DEVOLVIDO
          FROM NOTA_FISCAL_AS NF
          JOIN MV_CODIGO_OPERACAO_MARKETING MCO ON NF.COD_OPER_MKT = MCO.COD_OPER_MKT
          JOIN PDV_AS PDV ON NF.COD_CLIENTE = PDV.COD_CLIENTE AND NF.COD_DV_CLIENTE = PDV.COD_DV_CLIENTE
          JOIN MV_PDV MV ON NF.COD_CLIENTE = MV.COD_CLIENTE AND NF.COD_DV_CLIENTE = MV.COD_DV_CLIENTE
          JOIN MV_PRODUTO MVP ON NF.COD_PROD = MVP.COD_PROD
          WHERE PDV.cod_equipe_venda is not null –nao calcular loja sem RV
          AND NF.DAT_EMISSAO >= TRUNC(p_di, ‘MONTH’)
          AND NF.DAT_EMISSAO < trunc(p_df) + 1
          GROUP BY PDV.COD_CLIENTE,
          PDV.COD_DV_CLIENTE,
          MV.cod_rede_pdv,
          PDV.cod_equipe_venda

          Como postei anteriormente, isoladamente a SP_CALC_IND_RN30 não apresenta nenhum erro quando faço a chamada com pg_calculo.SP_CALC_IND_RN30(parametros).

          Abraço!

          #96510
          jspaulonci
          Participante

            Tente debugar e encontrar exatamente a linha que gera a exception

            #96511
            Fornasier
            Participante

              João,

              Já fiz isso. É exatamente no open do cursor.

              O que você acha da minha suspeita sobre as tabelas index by? Isoladamente a procedure executa sem erro.

              Abraço!

              #105075
              Fábio Prado
              Participante

                Pessoal,

                Só para ficar documentado, tive o mesmo erro habilitando parallel_degree_policy=auto na instância. O recurso de paralelismo automático no 11G estava ocasionando erros em packages que tentavam gerar arquivos externos. Tive que desabilitá-lo (valor padrão).
                

                Att,

                Fábio Prado
                http://www.fabioprado.net

                #105078
                MarcusPE
                Participante

                  Disponibiliza o código dessa stored procedure que apresenta o erro. Fica mais fácil para dar um opinião.

                  Mas como o erro é no Open do cursor e não está apresentando erro ao executar isoladamente, arriscaria que o cursor não está sendo fechado corretamente quando executado várias vezes.

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