create or replace PROCEDURE prc_grava_visita (
p_clob IN CLOB,
p_result OUT VARCHAR2
) AS
v_exception VARCHAR2(100);
v_check VARCHAR2(5);
v_json_obj json_object_t;
v_visita_arr json_array_t;
v_visita_obj json_object_t;
v_publicacao_arr json_array_t;
v_publicacao_obj json_object_t;
v_pesquisa_arr json_array_t;
v_pesquisa_obj json_object_t;
v_ativos_arr json_array_t;
v_ativos_obj json_object_t;
--trade_publicado_result
vvis_matricula VARCHAR2(10);
vvis_dt_coleta DATE;
vvis_id_visita VARCHAR2(255);
vvis_codigo_cliente NUMBER;
vvis_id_visita_agendada NUMBER;
vvis_id_status NUMBER;
vvis_matricula_supervisor VARCHAR2(10);
vvis_matricula_executivo VARCHAR2(10);
vvis_matricula_gerente VARCHAR2(10);
vvis_hora_planejada_checkin TIMESTAMP(6);
vvis_hora_checkin TIMESTAMP(6);
vvis_hora_planejada_checkout TIMESTAMP(6);
vvis_hora_checkout TIMESTAMP(6);
vvis_dt_sincronismo DATE;
vvis_nota_presenca VARCHAR2(255);
vvis_nota_promocao VARCHAR2(255);
vvis_nota_preço VARCHAR2(255);
vvis_nota_posicionamento VARCHAR2(255);
vvis_nota_geral VARCHAR2(255);
vvis_id_filtro_regional NUMBER;
vvis_id_filtro_formato NUMBER;
vvis_id_filtro_bandeira NUMBER;
vvis_id_filtro_estado NUMBER;
vvis_id_filtro_cidade NUMBER;
vvis_id_motivo_cancelamento NUMBER;
vvis_foto_nome VARCHAR2(255);
vvis_foto_tipo_arquivo VARCHAR2(255);
vvis_nota_coaching VARCHAR2(255);
vvis_matricula_promotor_avaliado VARCHAR2(255);
vvis_foto_checkin CLOB;
vvis_matricula_diretor VARCHAR2(10);
vvis_id_filtro_rede NUMBER;
vvis_id_modulo NUMBER;
--trade_grupo_publicacao
vpub_id_visita VARCHAR2(255);
vpub_id_publicacao NUMBER;
vpub_matricula VARCHAR2(10);
vpub_dt_coleta DATE;
vpub_codigo_cliente NUMBER;
vpub_count NUMBER;
--trade_pesquisa_result
vpes_id_pesquisa_result VARCHAR2(255);
vpes_id_pesquisa_pub NUMBER;
vpes_dt_coleta DATE;
vpes_id_objetivo NUMBER;
vpes_hora_inicio TIMESTAMP(6);
vpes_hora_fim TIMESTAMP(6);
vpes_dt_sincronismo DATE;
vpes_matricula VARCHAR2(10);
vpes_id_visita VARCHAR2(255);
vpes_id_modulo NUMBER;
--ativos
vati_id_centro VARCHAR2(10);
vati_id_ativo NUMBER;
vati_ds_ativo VARCHAR2(50);
vati_ds_tipo_rtm VARCHAR2(50);
vati_qt_saldo_sap NUMBER;
vati_id_grupo_cliente VARCHAR2(3);
vati_ds_grupo_cliente VARCHAR2(50);
vati_id_ativo_contrato NUMBER;
vati_dt_emissao DATE;
vati_dt_vencimento DATE;
vati_id_canal_distribuicao VARCHAR2(10);
vati_id_setor_atividade VARCHAR2(10);
vati_id_ativo_motivo NUMBER;
vati_ds_observacao CLOB;
vati_id_visita VARCHAR2(255);
vati_qt_saldo_coleta NUMBER;
BEGIN
SELECT
CASE
WHEN p_clob IS JSON THEN
'TRUE'
ELSE
'FALSE'
END
INTO v_check
FROM
dual;
IF v_check = 'TRUE' THEN
v_exception := 'É JSON';
--v_json_obj := json_object_t(replace(replace(p_clob, '{"ID_VISITA"', '[{"ID_VISITA"'), '},"Publicacoes"', '}],"Publicacoes"'));
v_json_obj := json_object_t(p_clob);
v_visita_arr := v_json_obj.get_array('Visitas');
FOR i IN 0..v_visita_arr.get_size - 1 LOOP
v_visita_obj := TREAT(v_visita_arr.get(i) AS json_object_t);
vvis_matricula := v_visita_obj.get_string('MATRICULA');
vvis_dt_coleta := TO_DATE(v_visita_obj.get_string('DT_COLETA'), 'DD/MM/YY');
vvis_id_visita := v_visita_obj.get_string('ID_VISITA');
vvis_codigo_cliente := v_visita_obj.get_string('CODIGO_CLIENTE');
vvis_id_visita_agendada := v_visita_obj.get_string('ID_VISITA_AGENDADA');
vvis_id_status := v_visita_obj.get_string('ID_STATUS');
vvis_matricula_supervisor := v_visita_obj.get_string('MATRICULA_SUPERVISOR');
vvis_matricula_executivo := v_visita_obj.get_string('MATRICULA_EXECUTIVO');
vvis_matricula_gerente := v_visita_obj.get_string('MATRICULA_GERENTE');
vvis_hora_planejada_checkin := to_timestamp(v_visita_obj.get_string('HORA_PLANEJADA_CHECKIN'), 'DD/MM/YY HH24:MI:SS')
;
vvis_hora_checkin := to_timestamp(v_visita_obj.get_string('HORA_CHECKIN'), 'DD/MM/YY HH24:MI:SS');
vvis_hora_planejada_checkout := to_timestamp(v_visita_obj.get_string('HORA_PLANEJADA_CHECKOUT'), 'DD/MM/YY HH24:MI:SS'
);
vvis_hora_checkout := to_timestamp(v_visita_obj.get_string('HORA_CHECKOUT'), 'DD/MM/YY HH24:MI:SS');
vvis_dt_sincronismo := TO_DATE(v_visita_obj.get_string('DT_SINCRONISMO'), 'DD/MM/YY');
vvis_nota_presenca := v_visita_obj.get_string('NOTA_PRESENCA');
vvis_nota_promocao := v_visita_obj.get_string('NOTA_PROMOCAO');
vvis_nota_preço := v_visita_obj.get_string('NOTA_preço');
vvis_nota_posicionamento := v_visita_obj.get_string('NOTA_POSICIONAMENTO');
vvis_nota_geral := v_visita_obj.get_string('NOTA_GERAL');
vvis_id_filtro_regional := v_visita_obj.get_string('ID_FILTRO_REGIONAL');
vvis_id_filtro_formato := v_visita_obj.get_string('ID_FILTRO_FORMATO');
vvis_id_filtro_bandeira := v_visita_obj.get_string('ID_FILTRO_BANDEIRA');
vvis_id_filtro_estado := v_visita_obj.get_string('ID_FILTRO_ESTADO');
vvis_id_filtro_cidade := v_visita_obj.get_string('ID_FILTRO_CIDADE');
vvis_id_motivo_cancelamento := v_visita_obj.get_string('ID_MOTIVO_CANCELAMENTO');
vvis_foto_nome := v_visita_obj.get_string('FILE_NAME');
vvis_foto_tipo_arquivo := v_visita_obj.get_string('FILE_MIMETYPE');
vvis_nota_coaching := v_visita_obj.get_string('nota_coaching');
vvis_matricula_promotor_avaliado := v_visita_obj.get_string('matricula_promotor_avaliado');
vvis_foto_checkin := v_visita_obj.get_string('FOTO_CHECKIN');
vvis_matricula_diretor := v_visita_obj.get_string('MATRICULA_DIRETOR');
vvis_id_filtro_rede := v_visita_obj.get_string('ID_FILTRO_REDE');
vvis_id_modulo := v_visita_obj.get_string('ID_MODULO');
UPDATE trade_publicado_result
SET
codigo_cliente = vvis_codigo_cliente,
id_status = vvis_id_status,
id_visita_agendada = vvis_id_visita_agendada,
matricula_supervisor = vvis_matricula_supervisor,
matricula_executivo = vvis_matricula_executivo,
matricula_gerente = vvis_matricula_gerente,
hora_planejada_checkin = vvis_hora_planejada_checkin,
hora_checkin = vvis_hora_checkin,
hora_planejada_checkout = vvis_hora_planejada_checkout,
hora_checkout = vvis_hora_checkout,
dt_sincronismo = vvis_dt_sincronismo,
nota_presenca = vvis_nota_presenca,
nota_promocao = vvis_nota_promocao,
nota_preço = vvis_nota_preço,
nota_posicionamento = vvis_nota_posicionamento,
nota_geral = vvis_nota_geral,
id_filtro_regional = nvl(vvis_id_filtro_regional,(
SELECT
fc.id_filtro
FROM
trade_filtro f
INNER JOIN trade_filtro_cliente fc ON f.id_filtro = fc.id_filtro
AND f.tipo_filtro = fc.tipo_filtro
AND f.id_modulo = fc.id_modulo
WHERE
f.id_modulo = vvis_id_modulo
AND f.tipo_filtro = 'REGIONAL'
AND f.ativo = 'S'
AND fc.codigo_cliente = vvis_codigo_cliente
AND ROWNUM = 1
)),
id_filtro_formato = nvl(vvis_id_filtro_formato,(
SELECT
fc.id_filtro
FROM
trade_filtro f
INNER JOIN trade_filtro_cliente fc ON f.id_filtro = fc.id_filtro
AND f.tipo_filtro = fc.tipo_filtro
AND f.id_modulo = fc.id_modulo
WHERE
f.id_modulo = vvis_id_modulo
AND f.tipo_filtro = 'FORMATO'
AND f.ativo = 'S'
AND fc.codigo_cliente = vvis_codigo_cliente
AND ROWNUM = 1
)),
id_filtro_bandeira = nvl(vvis_id_filtro_bandeira,(
SELECT
fc.id_filtro
FROM
trade_filtro f
INNER JOIN trade_filtro_cliente fc ON f.id_filtro = fc.id_filtro
AND f.tipo_filtro = fc.tipo_filtro
AND f.id_modulo = fc.id_modulo
WHERE
f.id_modulo = vvis_id_modulo
AND f.tipo_filtro = 'BANDEIRA'
AND f.ativo = 'S'
AND fc.codigo_cliente = vvis_codigo_cliente
AND ROWNUM = 1
)),
id_filtro_estado = nvl(vvis_id_filtro_estado,(
SELECT
fc.id_filtro
FROM
trade_filtro f
INNER JOIN trade_filtro_cliente fc ON f.id_filtro = fc.id_filtro
AND f.tipo_filtro = fc.tipo_filtro
AND f.id_modulo = fc.id_modulo
WHERE
f.id_modulo = vvis_id_modulo
AND f.tipo_filtro = 'ESTADO'
AND f.ativo = 'S'
AND fc.codigo_cliente = vvis_codigo_cliente
AND ROWNUM = 1
)),
id_filtro_cidade = nvl(vvis_id_filtro_cidade,(
SELECT
fc.id_filtro
FROM
trade_filtro f
INNER JOIN trade_filtro_cliente fc ON f.id_filtro = fc.id_filtro
AND f.tipo_filtro = fc.tipo_filtro
AND f.id_modulo = fc.id_modulo
WHERE
f.id_modulo = vvis_id_modulo
AND f.tipo_filtro = 'CIDADE'
AND f.ativo = 'S'
AND fc.codigo_cliente = vvis_codigo_cliente
AND ROWNUM = 1
)),
id_filtro_org_venda = (
SELECT
fc.id_filtro
FROM
trade_filtro f
INNER JOIN trade_filtro_cliente fc ON f.id_filtro = fc.id_filtro
AND f.tipo_filtro = fc.tipo_filtro
AND f.id_modulo = fc.id_modulo
WHERE
f.id_modulo = vvis_id_modulo
AND f.tipo_filtro = 'ORGANIZAÇÃO DE VENDA'
AND f.ativo = 'S'
AND fc.codigo_cliente = vvis_codigo_cliente
AND ROWNUM = 1
),
id_filtro_cat_cliente = (
SELECT
fc.id_filtro
FROM
trade_filtro f
INNER JOIN trade_filtro_cliente fc ON f.id_filtro = fc.id_filtro
AND f.tipo_filtro = fc.tipo_filtro
AND f.id_modulo = fc.id_modulo
WHERE
f.id_modulo = vvis_id_modulo
AND f.tipo_filtro = 'CATEGORIA DE CLIENTE'
AND f.ativo = 'S'
AND fc.codigo_cliente = vvis_codigo_cliente
AND ROWNUM = 1
),
id_filtro_grupo_cliente = (
SELECT
fc.id_filtro
FROM
trade_filtro f
INNER JOIN trade_filtro_cliente fc ON f.id_filtro = fc.id_filtro
AND f.tipo_filtro = fc.tipo_filtro
AND f.id_modulo = fc.id_modulo
WHERE
f.id_modulo = vvis_id_modulo
AND f.tipo_filtro = 'GRUPO DE CLIENTE'
AND f.ativo = 'S'
AND fc.codigo_cliente = vvis_codigo_cliente
AND ROWNUM = 1
),
id_motivo_cancelamento = vvis_id_motivo_cancelamento,
foto_nome = vvis_foto_nome,
foto_tipo_arquivo = vvis_foto_tipo_arquivo,
nota_coaching = vvis_nota_coaching,
matricula_promotor_avaliado = vvis_matricula_promotor_avaliado,
foto_checkin = vvis_foto_checkin,
matricula_diretor = vvis_matricula_diretor,
id_filtro_rede = nvl(vvis_id_filtro_rede,(
SELECT
fc.id_filtro
FROM
trade_filtro f
INNER JOIN trade_filtro_cliente fc ON f.id_filtro = fc.id_filtro
AND f.tipo_filtro = fc.tipo_filtro
AND f.id_modulo = fc.id_modulo
WHERE
f.id_modulo = vvis_id_modulo
AND f.tipo_filtro = 'REDE'
AND f.ativo = 'S'
AND fc.codigo_cliente = vvis_codigo_cliente
AND ROWNUM = 1
))
WHERE
id_visita = vvis_id_visita
AND matricula = vvis_matricula
AND id_modulo = vvis_id_modulo;
IF SQL%rowcount = 0 THEN
INSERT INTO trade_publicado_result (
matricula,
dt_coleta,
id_visita,
codigo_cliente,
id_visita_agendada,
id_status,
matricula_supervisor,
matricula_executivo,
matricula_gerente,
hora_planejada_checkin,
hora_checkin,
hora_planejada_checkout,
hora_checkout,
dt_sincronismo,
nota_presenca,
nota_promocao,
nota_preço,
nota_posicionamento,
nota_geral,
id_filtro_regional,
id_filtro_formato,
id_filtro_bandeira,
id_filtro_estado,
id_filtro_cidade,
id_filtro_org_venda,
id_filtro_cat_cliente,
id_filtro_grupo_cliente,
id_motivo_cancelamento,
foto_nome,
foto_tipo_arquivo,
nota_coaching,
matricula_promotor_avaliado,
foto_checkin,
matricula_diretor,
id_filtro_rede,
id_modulo
) VALUES (
vvis_matricula,
vvis_dt_coleta,
vvis_id_visita,
vvis_codigo_cliente,
vvis_id_visita_agendada,
vvis_id_status,
vvis_matricula_supervisor,
vvis_matricula_executivo,
vvis_matricula_gerente,
vvis_hora_planejada_checkin,
vvis_hora_checkin,
vvis_hora_planejada_checkout,
vvis_hora_checkout,
vvis_dt_sincronismo,
vvis_nota_presenca,
vvis_nota_promocao,
vvis_nota_preço,
vvis_nota_posicionamento,
vvis_nota_geral,
nvl(vvis_id_filtro_regional,(
SELECT
fc.id_filtro
FROM
trade_filtro f
INNER JOIN trade_filtro_cliente fc ON f.id_filtro = fc.id_filtro
AND f.tipo_filtro = fc.tipo_filtro
AND f.id_modulo = fc.id_modulo
WHERE
f.id_modulo = vvis_id_modulo
AND f.tipo_filtro = 'REGIONAL'
AND f.ativo = 'S'
AND fc.codigo_cliente = vvis_codigo_cliente
AND ROWNUM = 1
)),
nvl(vvis_id_filtro_formato,(
SELECT
fc.id_filtro
FROM
trade_filtro f
INNER JOIN trade_filtro_cliente fc ON f.id_filtro = fc.id_filtro
AND f.tipo_filtro = fc.tipo_filtro
AND f.id_modulo = fc.id_modulo
WHERE
f.id_modulo = vvis_id_modulo
AND f.tipo_filtro = 'FORMATO'
AND f.ativo = 'S'
AND fc.codigo_cliente = vvis_codigo_cliente
AND ROWNUM = 1
)),
nvl(vvis_id_filtro_bandeira,(
SELECT
fc.id_filtro
FROM
trade_filtro f
INNER JOIN trade_filtro_cliente fc ON f.id_filtro = fc.id_filtro
AND f.tipo_filtro = fc.tipo_filtro
AND f.id_modulo = fc.id_modulo
WHERE
f.id_modulo = vvis_id_modulo
AND f.tipo_filtro = 'BANDEIRA'
AND f.ativo = 'S'
AND fc.codigo_cliente = vvis_codigo_cliente
AND ROWNUM = 1
)),
nvl(vvis_id_filtro_estado,(
SELECT
fc.id_filtro
FROM
trade_filtro f
INNER JOIN trade_filtro_cliente fc ON f.id_filtro = fc.id_filtro
AND f.tipo_filtro = fc.tipo_filtro
AND f.id_modulo = fc.id_modulo
WHERE
f.id_modulo = vvis_id_modulo
AND f.tipo_filtro = 'ESTADO'
AND f.ativo = 'S'
AND fc.codigo_cliente = vvis_codigo_cliente
AND ROWNUM = 1
)),
nvl(vvis_id_filtro_cidade,(
SELECT
fc.id_filtro
FROM
trade_filtro f
INNER JOIN trade_filtro_cliente fc ON f.id_filtro = fc.id_filtro
AND f.tipo_filtro = fc.tipo_filtro
AND f.id_modulo = fc.id_modulo
WHERE
f.id_modulo = vvis_id_modulo
AND f.tipo_filtro = 'CIDADE'
AND f.ativo = 'S'
AND fc.codigo_cliente = vvis_codigo_cliente
AND ROWNUM = 1
)),
(
SELECT
fc.id_filtro
FROM
trade_filtro f
INNER JOIN trade_filtro_cliente fc ON f.id_filtro = fc.id_filtro
AND f.tipo_filtro = fc.tipo_filtro
AND f.id_modulo = fc.id_modulo
WHERE
f.id_modulo = vvis_id_modulo
AND f.tipo_filtro = 'ORGANIZAÇÃO DE VENDA'
AND f.ativo = 'S'
AND fc.codigo_cliente = vvis_codigo_cliente
AND ROWNUM = 1
),
(
SELECT
fc.id_filtro
FROM
trade_filtro f
INNER JOIN trade_filtro_cliente fc ON f.id_filtro = fc.id_filtro
AND f.tipo_filtro = fc.tipo_filtro
AND f.id_modulo = fc.id_modulo
WHERE
f.id_modulo = vvis_id_modulo
AND f.tipo_filtro = 'CATEGORIA DE CLIENTE'
AND f.ativo = 'S'
AND fc.codigo_cliente = vvis_codigo_cliente
AND ROWNUM = 1
),
(
SELECT
fc.id_filtro
FROM
trade_filtro f
INNER JOIN trade_filtro_cliente fc ON f.id_filtro = fc.id_filtro
AND f.tipo_filtro = fc.tipo_filtro
AND f.id_modulo = fc.id_modulo
WHERE
f.id_modulo = vvis_id_modulo
AND f.tipo_filtro = 'GRUPO DE CLIENTE'
AND f.ativo = 'S'
AND fc.codigo_cliente = vvis_codigo_cliente
AND ROWNUM = 1
),
vvis_id_motivo_cancelamento,
vvis_foto_nome,
vvis_foto_tipo_arquivo,
vvis_nota_coaching,
vvis_matricula_promotor_avaliado,
vvis_foto_checkin,
vvis_matricula_diretor,
nvl(vvis_id_filtro_rede,(
SELECT
fc.id_filtro
FROM
trade_filtro f
INNER JOIN trade_filtro_cliente fc ON f.id_filtro = fc.id_filtro
AND f.tipo_filtro = fc.tipo_filtro
AND f.id_modulo = fc.id_modulo
WHERE
f.id_modulo = vvis_id_modulo
AND f.tipo_filtro = 'REDE'
AND f.ativo = 'S'
AND fc.codigo_cliente = vvis_codigo_cliente
AND ROWNUM = 1
)),
vvis_id_modulo
);
v_exception := 'INSERT realizado em TRADE_PUBLICADO_RESULT';
ELSE
v_exception := 'UPDATE realizado em TRADE_PUBLICADO_RESULT';
END IF;
END LOOP;
v_publicacao_arr := v_json_obj.get_array('Publicacoes');
FOR i IN 0..v_publicacao_arr.get_size - 1 LOOP
v_publicacao_obj := TREAT(v_publicacao_arr.get(i) AS json_object_t);
vpub_id_visita := v_publicacao_obj.get_string('ID_VISITA');
vpub_id_publicacao := v_publicacao_obj.get_number('ID_PUBLICACAO');
vpub_matricula := v_publicacao_obj.get_string('MATRICULA');
vpub_dt_coleta := TO_DATE(v_publicacao_obj.get_string('DT_COLETA'), 'DD/MM/YY');
vpub_codigo_cliente := nvl(v_publicacao_obj.get_string('CODIGO_CLIENTE'), vvis_codigo_cliente);
SELECT
nvl((
SELECT
COUNT(*)
FROM
trade_grupo_publicacao
WHERE
id_visita = vpub_id_visita
AND id_publicacao = vpub_id_publicacao
AND matricula = vpub_matricula
AND dt_coleta = vpub_dt_coleta
), 0)
INTO vpub_count
FROM
dual;
IF vpub_count = 0 THEN
INSERT INTO trade_grupo_publicacao (
id_visita,
id_publicacao,
matricula,
dt_coleta,
codigo_cliente
) VALUES (
vpub_id_visita,
vpub_id_publicacao,
vpub_matricula,
vpub_dt_coleta,
vpub_codigo_cliente
);
v_exception := 'INSERT realizado em TRADE_GRUPO_PUBLICACAO';
END IF;
END LOOP;
v_pesquisa_arr := v_json_obj.get_array('Pesquisas');
FOR i IN 0..v_pesquisa_arr.get_size - 1 LOOP
v_pesquisa_obj := TREAT(v_pesquisa_arr.get(i) AS json_object_t);
vpes_id_pesquisa_result := v_pesquisa_obj.get_string('ID_PESQUISA_RESULT');
vpes_id_pesquisa_pub := v_pesquisa_obj.get_number('ID_PESQUISA_PUB');
vpes_dt_coleta := TO_DATE(v_pesquisa_obj.get_string('DT_COLETA'), 'DD/MM/YY');
vpes_id_objetivo := v_pesquisa_obj.get_number('ID_OBJETIVO');
vpes_hora_inicio := to_timestamp(v_pesquisa_obj.get_string('HORA_INICIO'), 'DD/MM/YY HH24:MI:SS');
vpes_hora_fim := to_timestamp(v_pesquisa_obj.get_string('HORA_FIM'), 'DD/MM/YY HH24:MI:SS');
vpes_dt_sincronismo := TO_DATE(v_pesquisa_obj.get_string('DT_SINCRONISMO'), 'DD/MM/YY');
vpes_matricula := v_pesquisa_obj.get_string('MATRICULA');
vpes_id_visita := v_pesquisa_obj.get_string('ID_VISITA');
vpes_id_modulo := v_pesquisa_obj.get_number('ID_MODULO');
UPDATE trade_pesquisa_result
SET
id_objetivo = vpes_id_objetivo,
hora_inicio = vpes_hora_inicio,
hora_fim = vpes_hora_fim,
dt_sincronismo = vpes_dt_sincronismo,
matricula = vpes_matricula,
dt_update = trunc(SYSDATE)
WHERE
id_pesquisa_result = vpes_id_pesquisa_result
AND id_modulo = vpes_id_modulo;
IF SQL%rowcount = 0 THEN
INSERT INTO trade_pesquisa_result (
id_pesquisa_result,
id_pesquisa_pub,
dt_coleta,
id_objetivo,
hora_inicio,
hora_fim,
dt_sincronismo,
matricula,
id_visita,
dt_update,
id_modulo
) VALUES (
vpes_id_pesquisa_result,
vpes_id_pesquisa_pub,
vpes_dt_coleta,
vpes_id_objetivo,
vpes_hora_inicio,
vpes_hora_fim,
vpes_dt_sincronismo,
vpes_matricula,
vpes_id_visita,
trunc(SYSDATE),
vpes_id_modulo
);
v_exception := 'INSERT realizado em TRADE_PESQUISA_RESULT';
ELSE
v_exception := 'UPDATE realizado em TRADE_PESQUISA_RESULT';
END IF;
END LOOP;
v_ativos_arr := v_json_obj.get_array('Ativos');
FOR i IN 0..v_ativos_arr.get_size - 1 LOOP
v_ativos_obj := TREAT(v_ativos_arr.get(i) AS json_object_t);
vati_id_centro := v_ativos_obj.get_string('CENTRO');
vati_id_ativo := v_ativos_obj.get_string('MATERIAL');
vati_ds_ativo := v_ativos_obj.get_string('MATERIAL_DESC');
vati_ds_tipo_rtm := v_ativos_obj.get_string('TIPO_RTM');
vati_qt_saldo_sap := v_ativos_obj.get_string('SALDO_ANTERIOR');
vati_id_grupo_cliente := v_ativos_obj.get_string('GRUPO_CLIENTES');
vati_ds_grupo_cliente := v_ativos_obj.get_string('GRUPO_CLIENTES_DESC');
vati_id_ativo_contrato := v_ativos_obj.get_string('CONTRATO');
vati_dt_emissao := TO_DATE(v_ativos_obj.get_string('CONTRATO_DATA_EMISSAO'), 'DD/MM/YY');
vati_dt_vencimento := TO_DATE(v_ativos_obj.get_string('CONTRATO_DATA_VENCIMENTO'), 'DD/MM/YY');
vati_id_canal_distribuicao := v_ativos_obj.get_string('CANAL_DISTRIBUICAO');
vati_id_setor_atividade := v_ativos_obj.get_string('SETOR_ATIVIDADE');
vati_id_ativo_motivo := v_ativos_obj.get_number('ID_MOTIVO');
vati_ds_observacao := v_ativos_obj.get_string('OBSERVACOES');
vati_id_visita := v_ativos_obj.get_string('ID_VISITA');
vati_qt_saldo_coleta := v_ativos_obj.get_number('SALDO_VERIFICADO');
UPDATE trade_ativo
SET
ds_ativo = vati_ds_ativo,
dt_update = DECODE(ds_ativo, vati_ds_ativo, dt_update, trunc(SYSDATE))
WHERE
id_ativo = vati_id_ativo;
IF SQL%rowcount = 0 THEN
INSERT INTO trade_ativo (
id_ativo,
ds_ativo,
dt_insert
) VALUES (
vati_id_ativo,
vati_ds_ativo,
trunc(SYSDATE)
);
v_exception := 'INSERT realizado em TRADE_ATIVO';
ELSE
v_exception := 'UPDATE realizado em TRADE_ATIVO';
END IF;
UPDATE trade_ativo_contrato
SET
dt_emissao = vati_dt_emissao,
dt_vencimento = vati_dt_vencimento
WHERE
id_ativo_contrato = vati_id_ativo_contrato;
IF SQL%rowcount = 0 THEN
INSERT INTO trade_ativo_contrato (
id_ativo_contrato,
dt_emissao,
dt_vencimento
) VALUES (
vati_id_ativo_contrato,
vati_dt_emissao,
vati_dt_vencimento
);
v_exception := 'INSERT realizado em TRADE_ATIVO_CONTRATO';
ELSE
v_exception := 'UPDATE realizado em TRADE_ATIVO_CONTRATO';
END IF;
UPDATE trade_ativo_result
SET
id_centro = vati_id_centro,
ds_tipo_rtm = vati_qt_saldo_sap,
codigo_cliente = vvis_codigo_cliente,
id_grupo_cliente = vati_id_grupo_cliente,
ds_grupo_cliente = vati_ds_grupo_cliente,
status = DECODE(vati_qt_saldo_coleta, vati_qt_saldo_sap, 'Não', 'Sim'),
qt_saldo_sap = vati_qt_saldo_sap,
qt_saldo_coleta = vati_qt_saldo_coleta,
id_ativo_motivo = DECODE(vati_id_ativo_motivo, 0, NULL),
ds_observacao = vati_ds_observacao,
id_ativo_contrato = vati_id_ativo_contrato,
id_canal_distribuicao = vati_id_canal_distribuicao,
id_setor_atividade = vati_id_setor_atividade,
id_modulo = vvis_id_modulo
WHERE
id_visita = vati_id_visita
AND id_ativo = vati_id_ativo
AND matricula = vvis_matricula
AND dt_coleta = vvis_dt_coleta;
IF SQL%rowcount = 0 THEN
INSERT INTO trade_ativo_result (
id_visita,
id_centro,
id_ativo,
ds_tipo_rtm,
codigo_cliente,
id_grupo_cliente,
ds_grupo_cliente,
status,
dt_coleta,
qt_saldo_sap,
qt_saldo_coleta,
matricula,
id_ativo_motivo,
ds_observacao,
id_ativo_contrato,
id_canal_distribuicao,
id_setor_atividade,
id_modulo
) VALUES (
vati_id_visita,
vati_id_centro,
vati_id_ativo,
vati_qt_saldo_sap,
vvis_codigo_cliente,
vati_id_grupo_cliente,
vati_ds_grupo_cliente,
DECODE(vati_qt_saldo_coleta, vati_qt_saldo_sap, 'Não', 'Sim'),
vvis_dt_coleta,
vati_qt_saldo_sap,
vati_qt_saldo_coleta,
vvis_matricula,
DECODE(vati_id_ativo_motivo, 0, NULL),
vati_ds_observacao,
vati_id_ativo_contrato,
vati_id_canal_distribuicao,
vati_id_setor_atividade,
vvis_id_modulo
);
v_exception := 'INSERT realizado em TRADE_ATIVO_RESULT';
ELSE
v_exception := 'UPDATE realizado em TRADE_ATIVO_RESULT';
END IF;
END LOOP;
COMMIT;
p_result := '1';--'Procedimento realizado com sucesso!';
ELSE
p_result := 'Não é JSON.';
END IF;
EXCEPTION
WHEN OTHERS THEN
p_result := 'Procedimento obteve sucesso até: '
|| v_exception
|| ', mas obteve erro: '
|| sqlerrm
|| ', ao executar: '
|| sqlcode;
ROLLBACK;
INSERT INTO trade_log_procedures (
json,
log,
procedure_executada
) VALUES (
p_clob,
p_result,
'PRC_GRAVA_VISITA'
);
COMMIT;
END;
Procedure está dando insert e não update
Estou tendo o seguinte problema. Tenho uma procedure que recebe um parâmetro do tipo clob. Tem uma rotina feita em APEX que pega essa planilha e sobe e a procedure consome. O que está acontecendo? Bem, quando o gestor sobe a planilha de forma errada, ele então faz a correção e tenta subir de novo. O que acontece, que nessa segunda subida, a procedure deveria fazer um Update e o que parece está dando Insert(dobrando/triplicando as linhas, para o mesmo registro), porem quando se faz essa alteração, acredito que muda alguma coisa e o registro passa a ser outro, por isso, creio eu, que é feito o Insert. Peguei a proc e confesso, apanhei um pouco para entender e por isso eu a colo aqui nesse post, pedindo a ajuda de vocês para eu entyender se estou certo ou não e porque o sistema entende ser um registro diferente. Enquanto isso, sigo em minha análise também. Qualquer ajuda é super bem vinda.
- dr_gori
- Moderador
- Mensagens: 5013
- Registrado em: Seg, 03 Mai 2004 3:08 pm
- Localização: Portland, OR USA
- Contato:
Thomas F. G
Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered
Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered
Pelo que eu estou vendo, a forma que ele usa pra saber se deve inserir é se caso o UPDATE afetou zero linhas.
Exemplo: (possui várias vezes isso)
Eu daria uma atenção nesses UPDATES aí pra saber se estão corretos.
Pelo que visto, o UPDATE está alterando ZERO linhas, causando o INSERT posteriormente.
Exemplo: (possui várias vezes isso)
UPDATE trade_ativo_contrato
SET
dt_emissao = vati_dt_emissao,
dt_vencimento = vati_dt_vencimento
WHERE
id_ativo_contrato = vati_id_ativo_contrato;
IF SQL%rowcount = 0 THEN
INSERT INTO trade_ativo_contrato (
id_ativo_contrato,
dt_emissao,
dt_vencimento
) VALUES (
vati_id_ativo_contrato,
vati_dt_emissao,
vati_dt_vencimento
);
Pelo que visto, o UPDATE está alterando ZERO linhas, causando o INSERT posteriormente.
-
- Informação
-
Quem está online
Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante