110 lines
4.2 KiB
SQL
110 lines
4.2 KiB
SQL
-- +goose Up
|
|
-- +goose StatementBegin
|
|
CREATE OR REPLACE PROCEDURE VITRUVIO.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
|