Reputation: 13
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