-- +goose Up -- +goose StatementBegin CREATE OR REPLACE PROCEDURE VITRUVIO.PRC_FLASH_CARGA_DADOS_PERDA ( p_data_inicial IN DATE, p_data_final IN DATE, p_empresa IN NUMBER, p_divisao IN VARCHAR2 DEFAULT NULL, p_cgos IN VARCHAR2 DEFAULT NULL ) AS BEGIN DELETE FROM TB_FLASH_FATO_PERDA WHERE data_referencia BETWEEN p_data_inicial AND p_data_final AND cod_empresa = p_empresa; INSERT INTO TB_FLASH_FATO_PERDA ( id_fato, data_referencia, ano_referencia, mes_referencia, dia_referencia, dia_semana, id_nodo, id_nodo_empresa, cod_empresa, nome_empresa, cod_produto, descricao_produto, seqprodutobase, nrodivisao, nrosegmento, qtde_perda, vlr_perda, propqtdprodutobase, data_cadastro, nome_segmento ) SELECT SEQ_TB_FLASH_FATO_PERDA.NEXTVAL, x.data_referencia, x.ano_referencia, x.mes_referencia, x.dia_referencia, x.dia_semana, x.id_nodo, x.id_nodo_empresa, x.cod_empresa, x.nome_empresa, x.cod_produto, x.descricao_produto, x.seqprodutobase, x.nrodivisao, x.nrosegmento, x.qtde_perda, x.vlr_perda, x.propqtdprodutobase, x.data_cadastro, x.nome_segmento FROM ( SELECT TRUNC(a.DTAVDA) AS data_referencia, EXTRACT(YEAR FROM a.DTAVDA) AS ano_referencia, EXTRACT(MONTH FROM a.DTAVDA) AS mes_referencia, EXTRACT(DAY FROM a.DTAVDA) AS dia_referencia, TO_NUMBER(TO_CHAR(a.DTAVDA,'D')) AS dia_semana, MIN(b.id_nodo) AS id_nodo, MIN(c.id_nodo) AS id_nodo_empresa, b.cod_empresa AS cod_empresa, MAX(d.fantasia) AS nome_empresa, a.seqproduto AS cod_produto, MAX(e.descreduzida) AS descricao_produto, MAX(e.seqprodutobase) AS seqprodutobase, MIN(a.nrodivisao) AS nrodivisao, a.nrosegmento AS nrosegmento, SUM(a.qtditem) AS qtde_perda, SUM(a.vlritem) AS vlr_perda, MAX(e.propqtdprodutobase) AS propqtdprodutobase, SYSDATE AS data_cadastro, MAX(seg1.descsegmento) AS nome_segmento FROM consinco.maxv_abcdistribbase a INNER JOIN vitruvio.TB_FLASH_NODO b ON b.tipo_nodo = 'PRODUTO' AND b.cod_empresa = a.nroempresa AND b.cod_produto = a.seqproduto INNER JOIN vitruvio.TB_FLASH_NODO c ON c.tipo_nodo = 'EMPRESA' AND c.cod_empresa = a.nroempresa INNER JOIN consinco.max_empresa d ON d.nroempresa = c.cod_empresa INNER JOIN consinco.map_produto e ON e.seqproduto = a.seqproduto INNER JOIN consinco.mad_segmento seg1 ON seg1.nrodivisao = a.nrodivisao AND seg1.nrosegmento = a.nrosegmento WHERE a.nroempresa = p_empresa AND a.dtavda BETWEEN p_data_inicial AND p_data_final AND (p_cgos IS NULL OR a.codgeraloper IN (SELECT TO_NUMBER(REGEXP_SUBSTR(p_cgos,'[^,]+',1,LEVEL)) FROM dual CONNECT BY REGEXP_SUBSTR(p_cgos,'[^,]+',1,LEVEL) IS NOT NULL)) AND (p_divisao IS NULL OR a.nrodivisao IN (SELECT TO_NUMBER(REGEXP_SUBSTR(p_divisao,'[^,]+',1,LEVEL)) FROM dual CONNECT BY REGEXP_SUBSTR(p_divisao,'[^,]+',1,LEVEL) IS NOT NULL)) GROUP BY TRUNC(a.dtavda), EXTRACT(YEAR FROM a.dtavda), EXTRACT(MONTH FROM a.dtavda), EXTRACT(DAY FROM a.dtavda), TO_NUMBER(TO_CHAR(a.dtavda,'D')), b.cod_empresa, a.seqproduto, a.nrosegmento ) x; 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_DADOS_PERDA' AND object_type = 'PROCEDURE'; IF v_count > 0 THEN EXECUTE IMMEDIATE 'DROP PROCEDURE PRC_FLASH_CARGA_DADOS_PERDA'; END IF; END; -- +goose StatementEnd