Atualização de migrations de objetos de banco de dados.
This commit is contained in:
@@ -0,0 +1,109 @@
|
||||
-- +goose Up
|
||||
-- +goose StatementBegin
|
||||
CREATE OR REPLACE PROCEDURE VITRUVIO.PRC_FLASH_CARGA_META_PERDA (
|
||||
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_PERDA
|
||||
WHERE data_referencia BETWEEN p_data_inicial AND p_data_final;
|
||||
|
||||
FOR r IN (
|
||||
SELECT *
|
||||
FROM TB_FLASH_META_PERDA_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_PERDA 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_PERDA.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_PERDA' AND object_type = 'PROCEDURE';
|
||||
IF v_count > 0 THEN
|
||||
EXECUTE IMMEDIATE 'DROP PROCEDURE PRC_FLASH_CARGA_META_PERDA';
|
||||
END IF;
|
||||
END;
|
||||
-- +goose StatementEnd
|
||||
Reference in New Issue
Block a user