diff --git a/migrations/C5_big/20260513000002_prc_flash_carga_meta_contribuicao_stg.sql b/migrations/C5_big/20260513000002_prc_flash_carga_meta_contribuicao_stg.sql new file mode 100644 index 0000000..43c4593 --- /dev/null +++ b/migrations/C5_big/20260513000002_prc_flash_carga_meta_contribuicao_stg.sql @@ -0,0 +1,36 @@ +-- +goose Up +-- +goose StatementBegin +CREATE OR REPLACE PROCEDURE PRC_FLASH_CARGA_META_CONTRIBUICAO_STG ( + p_data_inicial IN DATE, + p_data_final IN DATE +) AS +BEGIN + DELETE FROM TB_FLASH_META_CONTRIBUICAO_STG + WHERE data_referencia BETWEEN p_data_inicial AND p_data_final; + + INSERT INTO TB_FLASH_META_CONTRIBUICAO_STG ( + cod_empresa, tipo_nodo, codigo_nodo, codigo_nodo_pai, tipo_nodo_pai, + data_referencia, ano_referencia, mes_referencia, dia_referencia, + percentual_meta, valor_meta, observacao, origem_meta, data_carga + ) + SELECT cod_empresa, tipo_nodo, codigo_nodo, codigo_nodo_pai, tipo_nodo_pai, + data_referencia, ano_referencia, mes_referencia, dia_referencia, + percentual_meta, valor_meta, observacao, origem_meta, SYSDATE + FROM VW_FLASH_META_CONTRIBUICAO_STG + WHERE data_referencia BETWEEN p_data_inicial AND p_data_final; + + 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_CONTRIBUICAO_STG' AND object_type = 'PROCEDURE'; + IF v_count > 0 THEN + EXECUTE IMMEDIATE 'DROP PROCEDURE PRC_FLASH_CARGA_META_CONTRIBUICAO_STG'; + END IF; +END; +-- +goose StatementEnd diff --git a/migrations/C5_big/20260513000003_prc_flash_carga_meta_contribuicao.sql b/migrations/C5_big/20260513000003_prc_flash_carga_meta_contribuicao.sql new file mode 100644 index 0000000..2e4256f --- /dev/null +++ b/migrations/C5_big/20260513000003_prc_flash_carga_meta_contribuicao.sql @@ -0,0 +1,109 @@ +-- +goose Up +-- +goose StatementBegin +CREATE OR REPLACE PROCEDURE PRC_FLASH_CARGA_META_CONTRIBUICAO ( + 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_CONTRIBUICAO + WHERE data_referencia BETWEEN p_data_inicial AND p_data_final; + + FOR r IN ( + SELECT * + FROM TB_FLASH_META_CONTRIBUICAO_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_CONTRIBUICAO 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_CONTRIBUICAO.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_CONTRIBUICAO' AND object_type = 'PROCEDURE'; + IF v_count > 0 THEN + EXECUTE IMMEDIATE 'DROP PROCEDURE PRC_FLASH_CARGA_META_CONTRIBUICAO'; + END IF; +END; +-- +goose StatementEnd