Felipe Morales
Felipe Morales

Reputation: 13

Select insert, using view, very slow inside package

I got a select-insert statement that uses a view, when a run it inside a SQL Window in PL/SQL Developer, it executes in 17 seconds, however, when I run it inside a package, it ultrapasses 10 minutes.

I tried to replace the parameter in the where clause (p_id_arquivo) for a number literal to see if it runs faster because of the execution plan, but nothing changed.

Can you guys help? If you need anything else please tell me.

Thank you.

Follows the code:

/*Insert executed in the SQL Windows - Runs in 17 secs - Cost 6 in explain 
window*/
insert into GT_ARQ_CONTA_TIM_3
      (ID_ARQUIVO,
       ID_LAYOUT,
       NOME_ARQUIVO,
       DT_IMPORTACAO,
       DT_INTEGRACAO,
       STATUS_ARQUIVO,
       ID_ARQUIVO_LINHAS,
       TIPO_REGISTRO,
       CONTROLE_SEQ,
       DATA_VENCIMENTO,
       DATA_EMISSAO,
       NRC,
       CNL_RECURSO,
       DDD,
       NUM_TELEFONE,
       CARACT_RECURSO,
       DEGRAU_RECURSO,
       DATA_LIGACAO,
       CNL_LOCALIDADE,
       NOME_LOCALIDADE,
       UF_TELEFONE,
       COD_NACIONAL_INTERNACIONAL,
       COD_OPERADORA,
       DESC_OPERADORA,
       COD_PAIS_CHAMADO,
       AREA_DDD,
       NUM_TELEFONE_CHAMADO,
       Conjugado_Num_Tel_Chamado,
       DURACAO_LIGACAO,
       CATEGORIA,
       DESCRICAO_CATEGORIA,
       HORARIO_LIGACAO,
       TIPO_DE_CHAMADA,
       GRUPO_HORARIO_TARIFARIO,
       DESC_HORARIO_TARIFARIO,
       DEGRAU_LIGACAO,
       SINAL_VLR_LIGACAO,
       ALIQUOTA_ICMS,
       VLR_LIGACAO_IMP,
       CLASSE_SERVICO,
       FILLER)
      (select ID_ARQUIVO,
              ID_LAYOUT,
              NOME_ARQUIVO,
              DT_IMPORTACAO,
              DT_INTEGRACAO,
              STATUS_ARQUIVO,
              ID_ARQUIVO_LINHAS,
              TIPO_REGISTRO,
              CONTROLE_SEQ,
              DATA_VENCIMENTO,
              DATA_EMISSAO,
              NRC,
              CNL_RECURSO,
              DDD,
              NUM_TELEFONE,
              CARACT_RECURSO,
              DEGRAU_RECURSO,
              DATA_LIGACAO,
              CNL_LOCALIDADE,
              NOME_LOCALIDADE,
              UF_TELEFONE,
              COD_NACIONAL_INTERNACIONAL,
              COD_OPERADORA,
              DESC_OPERADORA,
              COD_PAIS_CHAMADO,
              AREA_DDD,
              NUM_TELEFONE_CHAMADO,
              Conjugado_Num_Tel_Chamado,
              DURACAO_LIGACAO,
              CATEGORIA,
              DESCRICAO_CATEGORIA,
              HORARIO_LIGACAO,
              TIPO_DE_CHAMADA,
              GRUPO_HORARIO_TARIFARIO,
              DESC_HORARIO_TARIFARIO,
              DEGRAU_LIGACAO,
              SINAL_VLR_LIGACAO,
              ALIQUOTA_ICMS,
              VLR_LIGACAO_IMP,
              CLASSE_SERVICO,
              FILLER
         from vw_arq_conta_tim_3 V
        where v.ID_ARQUIVO = 992362);

Inside the packge:

 /*Select insert inside package, P_ID_ARQUIVO is the parameter of the 
package's procedure, its NUMBER*/
BEGIN
    insert into GT_ARQ_CONTA_TIM_3
      (ID_ARQUIVO,
       ID_LAYOUT,
       NOME_ARQUIVO,
       DT_IMPORTACAO,
       DT_INTEGRACAO,
       STATUS_ARQUIVO,
       ID_ARQUIVO_LINHAS,
       TIPO_REGISTRO,
       CONTROLE_SEQ,
       DATA_VENCIMENTO,
       DATA_EMISSAO,
       NRC,
       CNL_RECURSO,
       DDD,
       NUM_TELEFONE,
       CARACT_RECURSO,
       DEGRAU_RECURSO,
       DATA_LIGACAO,
       CNL_LOCALIDADE,
       NOME_LOCALIDADE,
       UF_TELEFONE,
       COD_NACIONAL_INTERNACIONAL,
       COD_OPERADORA,
       DESC_OPERADORA,
       COD_PAIS_CHAMADO,
       AREA_DDD,
       NUM_TELEFONE_CHAMADO,
       Conjugado_Num_Tel_Chamado,
       DURACAO_LIGACAO,
       CATEGORIA,
       DESCRICAO_CATEGORIA,
       HORARIO_LIGACAO,
       TIPO_DE_CHAMADA,
       GRUPO_HORARIO_TARIFARIO,
       DESC_HORARIO_TARIFARIO,
       DEGRAU_LIGACAO,
       SINAL_VLR_LIGACAO,
       ALIQUOTA_ICMS,
       VLR_LIGACAO_IMP,
       CLASSE_SERVICO,
       FILLER)
      (select ID_ARQUIVO,
              ID_LAYOUT,
              NOME_ARQUIVO,
              DT_IMPORTACAO,
              DT_INTEGRACAO,
              STATUS_ARQUIVO,
              ID_ARQUIVO_LINHAS,
              TIPO_REGISTRO,
              CONTROLE_SEQ,
              DATA_VENCIMENTO,
              DATA_EMISSAO,
              NRC,
              CNL_RECURSO,
              DDD,
              NUM_TELEFONE,
              CARACT_RECURSO,
              DEGRAU_RECURSO,
              DATA_LIGACAO,
              CNL_LOCALIDADE,
              NOME_LOCALIDADE,
              UF_TELEFONE,
              COD_NACIONAL_INTERNACIONAL,
              COD_OPERADORA,
              DESC_OPERADORA,
              COD_PAIS_CHAMADO,
              AREA_DDD,
              NUM_TELEFONE_CHAMADO,
              Conjugado_Num_Tel_Chamado,
              DURACAO_LIGACAO,
              CATEGORIA,
              DESCRICAO_CATEGORIA,
              HORARIO_LIGACAO,
              TIPO_DE_CHAMADA,
              GRUPO_HORARIO_TARIFARIO,
              DESC_HORARIO_TARIFARIO,
              DEGRAU_LIGACAO,
              SINAL_VLR_LIGACAO,
              ALIQUOTA_ICMS,
              VLR_LIGACAO_IMP,
              CLASSE_SERVICO,
              FILLER
         from vw_arq_conta_tim_3 V
        where v.ID_ARQUIVO = p_id_arquivo); ----teste - plano de execução
  EXCEPTION
    WHEN OTHERS THEN
      RAISE_APPLICATION_ERROR(-20100,
                              'Erro ao inserir na GT_ARQ_CONTA_TIM_3! ' ||
                              sqlerrm);
  END;

The view vw_arq_conta_tim_3:

        CREATE OR REPLACE VIEW VW_ARQ_CONTA_TIM_3 AS
    SELECT A.ID_ARQUIVO
         , A.ID_LAYOUT
         , A.NOME_ARQUIVO
         , A.DT_IMPORTACAO
         , A.DT_INTEGRACAO
         , A.STATUS_ARQUIVO
         , B.ID_ARQUIVO_LINHAS
         , FU_ARQ_BUSCA_VALOR_COLUNA(A.ID_LAYOUT,B.ID_LAYOUT_LINHAS,'TIPO_REGISTRO',B.VALOR)       TIPO_REGISTRO
         , FU_ARQ_BUSCA_VALOR_COLUNA(A.ID_LAYOUT,B.ID_LAYOUT_LINHAS,'CONTROLE_SEQ',B.VALOR)       CONTROLE_SEQ
         , FU_ARQ_BUSCA_VALOR_COLUNA(A.ID_LAYOUT,B.ID_LAYOUT_LINHAS,'DATA_VENCIMENTO',B.VALOR)       DATA_VENCIMENTO
         , FU_ARQ_BUSCA_VALOR_COLUNA(A.ID_LAYOUT,B.ID_LAYOUT_LINHAS,'DATA_EMISSAO',B.VALOR)       DATA_EMISSAO
         , FU_ARQ_BUSCA_VALOR_COLUNA(A.ID_LAYOUT,B.ID_LAYOUT_LINHAS,'NRC',B.VALOR)       NRC
         , FU_ARQ_BUSCA_VALOR_COLUNA(A.ID_LAYOUT,B.ID_LAYOUT_LINHAS,'CNL_RECURSO',B.VALOR)       CNL_RECURSO
         , FU_ARQ_BUSCA_VALOR_COLUNA(A.ID_LAYOUT,B.ID_LAYOUT_LINHAS,'DDD',B.VALOR)       DDD
         , FU_ARQ_BUSCA_VALOR_COLUNA(A.ID_LAYOUT,B.ID_LAYOUT_LINHAS,'NUM_TELEFONE',B.VALOR)       NUM_TELEFONE
         , FU_ARQ_BUSCA_VALOR_COLUNA(A.ID_LAYOUT,B.ID_LAYOUT_LINHAS,'CARACT_RECURSO',B.VALOR)       CARACT_RECURSO
         , FU_ARQ_BUSCA_VALOR_COLUNA(A.ID_LAYOUT,B.ID_LAYOUT_LINHAS,'DEGRAU_RECURSO',B.VALOR)       DEGRAU_RECURSO
         , FU_ARQ_BUSCA_VALOR_COLUNA(A.ID_LAYOUT,B.ID_LAYOUT_LINHAS,'DATA_LIGACAO',B.VALOR)       DATA_LIGACAO
         , FU_ARQ_BUSCA_VALOR_COLUNA(A.ID_LAYOUT,B.ID_LAYOUT_LINHAS,'CNL_LOCALIDADE',B.VALOR)       CNL_LOCALIDADE
         , FU_ARQ_BUSCA_VALOR_COLUNA(A.ID_LAYOUT,B.ID_LAYOUT_LINHAS,'NOME_LOCALIDADE',B.VALOR)       NOME_LOCALIDADE
         , FU_ARQ_BUSCA_VALOR_COLUNA(A.ID_LAYOUT,B.ID_LAYOUT_LINHAS,'UF_TELEFONE',B.VALOR)       UF_TELEFONE
         , FU_ARQ_BUSCA_VALOR_COLUNA(A.ID_LAYOUT,B.ID_LAYOUT_LINHAS,'COD_NACIONAL_INTERNACIONAL',B.VALOR)       COD_NACIONAL_INTERNACIONAL
         , FU_ARQ_BUSCA_VALOR_COLUNA(A.ID_LAYOUT,B.ID_LAYOUT_LINHAS,'COD_OPERADORA',B.VALOR)       COD_OPERADORA
         , FU_ARQ_BUSCA_VALOR_COLUNA(A.ID_LAYOUT,B.ID_LAYOUT_LINHAS,'DESC_OPERADORA',B.VALOR)       DESC_OPERADORA
         , FU_ARQ_BUSCA_VALOR_COLUNA(A.ID_LAYOUT,B.ID_LAYOUT_LINHAS,'COD_PAIS_CHAMADO',B.VALOR)       COD_PAIS_CHAMADO
         , FU_ARQ_BUSCA_VALOR_COLUNA(A.ID_LAYOUT,B.ID_LAYOUT_LINHAS,'AREA_DDD',B.VALOR)       AREA_DDD
         , FU_ARQ_BUSCA_VALOR_COLUNA(A.ID_LAYOUT,B.ID_LAYOUT_LINHAS,'NUM_TELEFONE_CHAMADO',B.VALOR)       NUM_TELEFONE_CHAMADO
         , FU_ARQ_BUSCA_VALOR_COLUNA(A.ID_LAYOUT,B.ID_LAYOUT_LINHAS,'CONJUGADO_NUM_TEL_CHAMADO',B.VALOR)       CONJUGADO_NUM_TEL_CHAMADO
         , FU_ARQ_BUSCA_VALOR_COLUNA(A.ID_LAYOUT,B.ID_LAYOUT_LINHAS,'DURACAO_LIGACAO',B.VALOR)       DURACAO_LIGACAO
         , FU_ARQ_BUSCA_VALOR_COLUNA(A.ID_LAYOUT,B.ID_LAYOUT_LINHAS,'CATEGORIA',B.VALOR)       CATEGORIA
         , FU_ARQ_BUSCA_VALOR_COLUNA(A.ID_LAYOUT,B.ID_LAYOUT_LINHAS,'DESCRICAO_CATEGORIA',B.VALOR)       DESCRICAO_CATEGORIA
         , FU_ARQ_BUSCA_VALOR_COLUNA(A.ID_LAYOUT,B.ID_LAYOUT_LINHAS,'HORARIO_LIGACAO',B.VALOR)       HORARIO_LIGACAO
         , FU_ARQ_BUSCA_VALOR_COLUNA(A.ID_LAYOUT,B.ID_LAYOUT_LINHAS,'TIPO_DE_CHAMADA',B.VALOR)       TIPO_DE_CHAMADA
         , FU_ARQ_BUSCA_VALOR_COLUNA(A.ID_LAYOUT,B.ID_LAYOUT_LINHAS,'GRUPO_HORARIO_TARIFARIO',B.VALOR)       GRUPO_HORARIO_TARIFARIO
         , FU_ARQ_BUSCA_VALOR_COLUNA(A.ID_LAYOUT,B.ID_LAYOUT_LINHAS,'DESC_HORARIO_TARIFARIO',B.VALOR)       DESC_HORARIO_TARIFARIO
         , FU_ARQ_BUSCA_VALOR_COLUNA(A.ID_LAYOUT,B.ID_LAYOUT_LINHAS,'DEGRAU_LIGACAO',B.VALOR)       DEGRAU_LIGACAO
         , FU_ARQ_BUSCA_VALOR_COLUNA(A.ID_LAYOUT,B.ID_LAYOUT_LINHAS,'SINAL_VLR_LIGACAO',B.VALOR)       SINAL_VLR_LIGACAO
         , FU_ARQ_BUSCA_VALOR_COLUNA(A.ID_LAYOUT,B.ID_LAYOUT_LINHAS,'ALIQUOTA_ICMS',B.VALOR)       ALIQUOTA_ICMS
         , FU_ARQ_BUSCA_VALOR_COLUNA(A.ID_LAYOUT,B.ID_LAYOUT_LINHAS,'VLR_LIGACAO_IMP',B.VALOR)       VLR_LIGACAO_IMP
         , FU_ARQ_BUSCA_VALOR_COLUNA(A.ID_LAYOUT,B.ID_LAYOUT_LINHAS,'CLASSE_SERVICO',B.VALOR)       CLASSE_SERVICO
         , FU_ARQ_BUSCA_VALOR_COLUNA(A.ID_LAYOUT,B.ID_LAYOUT_LINHAS,'FILLER',B.VALOR)       FILLER
      FROM ARQ_ARQUIVO        A,
           ARQ_ARQUIVO_LINHAS B,
           ARQ_LAYOUT         C,
           ARQ_LAYOUT_LINHAS  D
     WHERE A.ID_ARQUIVO       = B.ID_ARQUIVO
       AND A.ID_LAYOUT        = C.ID_LAYOUT
       AND B.ID_LAYOUT_LINHAS = D.ID_LAYOUT_LINHAS
       AND A.ID_LAYOUT        = 194
       AND B.ID_LAYOUT_LINHAS = 2478
    ORDER BY A.ID_ARQUIVO, B.ID_ARQUIVO_LINHAS;

The sql for the gt_arq_conta_tim_3:

-- Create table
    create global temporary table GT_ARQ_CONTA_TIM_3
    (
      ID_ARQUIVO                 NUMBER(20) not null,
      ID_LAYOUT                  NUMBER(20) not null,
      NOME_ARQUIVO               VARCHAR2(100) not null,
      DT_IMPORTACAO              DATE not null,
      DT_INTEGRACAO              DATE,
      STATUS_ARQUIVO             VARCHAR2(1),
      ID_ARQUIVO_LINHAS          NUMBER(20) not null,
      TIPO_REGISTRO              VARCHAR2(4000),
      CONTROLE_SEQ               VARCHAR2(4000),
      DATA_VENCIMENTO            VARCHAR2(4000),
      DATA_EMISSAO               VARCHAR2(4000),
      NRC                        VARCHAR2(4000),
      CNL_RECURSO                VARCHAR2(4000),
      DDD                        VARCHAR2(4000),
      NUM_TELEFONE               VARCHAR2(4000),
      CARACT_RECURSO             VARCHAR2(4000),
      DEGRAU_RECURSO             VARCHAR2(4000),
      DATA_LIGACAO               VARCHAR2(4000),
      CNL_LOCALIDADE             VARCHAR2(4000),
      NOME_LOCALIDADE            VARCHAR2(4000),
      UF_TELEFONE                VARCHAR2(4000),
      COD_NACIONAL_INTERNACIONAL VARCHAR2(4000),
      COD_OPERADORA              VARCHAR2(4000),
      DESC_OPERADORA             VARCHAR2(4000),
      COD_PAIS_CHAMADO           VARCHAR2(4000),
      AREA_DDD                   VARCHAR2(4000),
      NUM_TELEFONE_CHAMADO       VARCHAR2(4000),
      CONJUGADO_NUM_TEL_CHAMADO  VARCHAR2(4000),
      DURACAO_LIGACAO            VARCHAR2(4000),
      CATEGORIA                  VARCHAR2(4000),
      DESCRICAO_CATEGORIA        VARCHAR2(4000),
      HORARIO_LIGACAO            VARCHAR2(4000),
      TIPO_DE_CHAMADA            VARCHAR2(4000),
      GRUPO_HORARIO_TARIFARIO    VARCHAR2(4000),
      DESC_HORARIO_TARIFARIO     VARCHAR2(4000),
      DEGRAU_LIGACAO             VARCHAR2(4000),
      SINAL_VLR_LIGACAO          VARCHAR2(4000),
      ALIQUOTA_ICMS              VARCHAR2(4000),
      VLR_LIGACAO_IMP            VARCHAR2(4000),
      CLASSE_SERVICO             VARCHAR2(4000),
      FILLER                     VARCHAR2(4000)
    )
    on commit delete rows;
    -- Grant/Revoke object privileges 
    grant select, insert, update, delete, alter on GT_ARQ_CONTA_TIM_3 to 
GERAL;

Upvotes: 1

Views: 99

Answers (0)

Related Questions