Выберите вставку, используя вид, очень медленно внутри пакета
Я получил оператор select-insert, который использует представление, когда он запускается в окне SQL в PL/SQL Developer, он выполняется за 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;
Sql для 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;