选择插入,使用视图,内部包非常慢

时间:2018-02-07 12:08:49

标签: database oracle plsql select-insert

我有一个使用视图的select-insert语句,当它在PL / SQL Developer的SQL窗口中运行时,它会在17秒内执行,但是,当我在一个包中运行它时,它会超过10分钟。

我试图将where子句(p_id_arquivo)中的参数替换为数字文字,以查看它是否由于执行计划而运行得更快,但没有任何改变。

你能帮忙吗?如果您还有其他需要请告诉我。

谢谢。

遵循以下代码:

/*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);

在包装内:

 /*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;

查看视图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;

gt_arq_conta_tim_3:

的sql
-- 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;

0 个答案:

没有答案