Files
app-dono-modulos/migrations/C5_big/20260430000012_prc_flash_carga_meta_venda.sql

110 lines
4.2 KiB
SQL

-- +goose Up
-- +goose StatementBegin
CREATE OR REPLACE PROCEDURE PRC_FLASH_CARGA_META_VENDA (
p_data_inicial IN DATE,
p_data_final IN DATE
) AS
v_id_nodo NUMBER;
v_id_nodo_pai NUMBER;
BEGIN
DELETE FROM TB_FLASH_META_VENDA
WHERE data_referencia BETWEEN p_data_inicial AND p_data_final;
FOR r IN (
SELECT *
FROM TB_FLASH_META_VENDA_STG
WHERE data_referencia BETWEEN p_data_inicial AND p_data_final
) LOOP
v_id_nodo := NULL;
v_id_nodo_pai := NULL;
IF r.codigo_nodo_pai IS NOT NULL THEN
BEGIN
SELECT n.id_nodo
INTO v_id_nodo_pai
FROM TB_FLASH_NODO n
WHERE n.codigo = r.codigo_nodo_pai
AND n.tipo_nodo = r.tipo_nodo_pai
AND NVL(n.cod_empresa, -1) = NVL(r.cod_empresa, -1);
EXCEPTION
WHEN TOO_MANY_ROWS THEN v_id_nodo_pai := NULL;
WHEN NO_DATA_FOUND THEN v_id_nodo_pai := NULL;
END;
END IF;
BEGIN
IF r.tipo_nodo = 'EMPRESA' THEN
SELECT n.id_nodo INTO v_id_nodo
FROM TB_FLASH_NODO n
WHERE n.tipo_nodo = 'EMPRESA'
AND n.codigo = r.codigo_nodo
AND n.id_nodo_pai IS NULL;
ELSIF r.tipo_nodo = 'PRODUTO' THEN
SELECT n.id_nodo INTO v_id_nodo
FROM TB_FLASH_NODO n
WHERE n.tipo_nodo = 'PRODUTO'
AND n.codigo = r.codigo_nodo
AND NVL(n.cod_empresa, -1) = NVL(r.cod_empresa, -1)
AND (v_id_nodo_pai IS NULL OR n.id_nodo_pai = v_id_nodo_pai);
ELSE
SELECT n.id_nodo INTO v_id_nodo
FROM TB_FLASH_NODO n
WHERE n.tipo_nodo = 'CATEGORIA'
AND n.codigo = r.codigo_nodo
AND NVL(n.cod_empresa, -1) = NVL(r.cod_empresa, -1)
AND (v_id_nodo_pai IS NULL OR n.id_nodo_pai = v_id_nodo_pai);
END IF;
EXCEPTION
WHEN TOO_MANY_ROWS THEN v_id_nodo := NULL;
WHEN NO_DATA_FOUND THEN v_id_nodo := NULL;
END;
IF v_id_nodo IS NOT NULL THEN
MERGE INTO TB_FLASH_META_VENDA dst
USING (
SELECT v_id_nodo AS id_nodo,
r.data_referencia AS data_referencia,
r.ano_referencia AS ano_referencia,
r.mes_referencia AS mes_referencia,
r.dia_referencia AS dia_referencia,
r.percentual_meta AS percentual_meta,
r.valor_meta AS valor_meta,
r.observacao AS observacao
FROM dual
) src
ON (dst.id_nodo = src.id_nodo AND dst.data_referencia = src.data_referencia)
WHEN MATCHED THEN UPDATE SET
dst.percentual_meta = src.percentual_meta,
dst.valor_meta = src.valor_meta,
dst.observacao = src.observacao,
dst.ano_referencia = src.ano_referencia,
dst.mes_referencia = src.mes_referencia,
dst.dia_referencia = src.dia_referencia,
dst.data_atualizacao = SYSDATE
WHEN NOT MATCHED THEN INSERT (
id_meta, id_nodo, data_referencia, ano_referencia, mes_referencia, dia_referencia,
percentual_meta, valor_meta, observacao, data_cadastro, data_atualizacao
) VALUES (
SEQ_TB_FLASH_META_VENDA.NEXTVAL, src.id_nodo, src.data_referencia, src.ano_referencia,
src.mes_referencia, src.dia_referencia, src.percentual_meta, src.valor_meta, src.observacao,
SYSDATE, NULL
);
END IF;
END LOOP;
COMMIT;
END;
-- +goose StatementEnd
-- +goose Down
-- +goose StatementBegin
DECLARE
v_count NUMBER;
BEGIN
SELECT COUNT(*) INTO v_count FROM user_objects WHERE object_name = 'PRC_FLASH_CARGA_META_VENDA' AND object_type = 'PROCEDURE';
IF v_count > 0 THEN
EXECUTE IMMEDIATE 'DROP PROCEDURE PRC_FLASH_CARGA_META_VENDA';
END IF;
END;
-- +goose StatementEnd