-- +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