Atualizações e criação das tabelas para o ambiente do Barcelos.
davinTI/app-dono-modulos/pipeline/head This commit looks good

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-05-20 16:27:57 -03:00
parent 7072a48eb6
commit 6acc92dfe2
56 changed files with 6045 additions and 0 deletions
@@ -0,0 +1,23 @@
-- +goose Up
-- +goose StatementBegin
DECLARE
v_count NUMBER;
BEGIN
SELECT COUNT(*) INTO v_count FROM user_sequences WHERE sequence_name = 'SEQ_TB_FLASH_FATO_PERDA';
IF v_count = 0 THEN
EXECUTE IMMEDIATE 'CREATE SEQUENCE SEQ_TB_FLASH_FATO_PERDA START WITH 1 INCREMENT BY 1 NOCACHE NOCYCLE';
END IF;
END;
-- +goose StatementEnd
-- +goose Down
-- +goose StatementBegin
DECLARE
v_count NUMBER;
BEGIN
SELECT COUNT(*) INTO v_count FROM user_sequences WHERE sequence_name = 'SEQ_TB_FLASH_FATO_PERDA';
IF v_count > 0 THEN
EXECUTE IMMEDIATE 'DROP SEQUENCE SEQ_TB_FLASH_FATO_PERDA';
END IF;
END;
-- +goose StatementEnd
@@ -0,0 +1,109 @@
-- +goose Up
-- +goose StatementBegin
DECLARE
v_count NUMBER;
BEGIN
SELECT COUNT(*) INTO v_count FROM user_tables WHERE table_name = 'TB_FLASH_FATO_PERDA';
IF v_count = 0 THEN
EXECUTE IMMEDIATE '
CREATE TABLE TB_FLASH_FATO_PERDA (
ID_FATO NUMBER NOT NULL,
DATA_REFERENCIA DATE NOT NULL,
ANO_REFERENCIA NUMBER(4) NOT NULL,
MES_REFERENCIA NUMBER(2) NOT NULL,
DIA_REFERENCIA NUMBER(2),
DIA_SEMANA NUMBER(2),
ID_NODO NUMBER NOT NULL,
ID_NODO_EMPRESA NUMBER NOT NULL,
COD_EMPRESA NUMBER NOT NULL,
NOME_EMPRESA VARCHAR2(200),
COD_PRODUTO NUMBER NOT NULL,
DESCRICAO_PRODUTO VARCHAR2(300),
SEQPRODUTOBASE NUMBER,
NRODIVISAO NUMBER,
NROSEGMENTO NUMBER,
VLR_CUSTO_PERDA NUMBER(18,6),
QTDE_PERDA NUMBER(18,6),
VLR_PERDA NUMBER(18,6),
PROPQTDPRODUTOBASE NUMBER(18,6),
DATA_CADASTRO DATE DEFAULT SYSDATE NOT NULL,
CONSTRAINT PK_TB_FLASH_FATO_PERDA PRIMARY KEY (ID_FATO),
CONSTRAINT FK_TB_FLASH_FATO_PERDA_NODO FOREIGN KEY (ID_NODO) REFERENCES TB_FLASH_NODO (ID_NODO),
CONSTRAINT FK_TB_FLASH_FATO_PERDA_EMP FOREIGN KEY (ID_NODO_EMPRESA) REFERENCES TB_FLASH_NODO (ID_NODO),
CONSTRAINT CK_TB_FLASH_FATO_PERDA_MES CHECK (MES_REFERENCIA BETWEEN 1 AND 12)
)';
END IF;
END;
-- +goose StatementEnd
-- +goose StatementBegin
DECLARE
v_count NUMBER;
BEGIN
SELECT COUNT(*) INTO v_count FROM user_indexes WHERE index_name = 'IX_TB_FLASH_FATO_PERDA_DATA';
IF v_count = 0 THEN
EXECUTE IMMEDIATE 'CREATE INDEX IX_TB_FLASH_FATO_PERDA_DATA ON TB_FLASH_FATO_PERDA (DATA_REFERENCIA)';
END IF;
END;
-- +goose StatementEnd
-- +goose StatementBegin
DECLARE
v_count NUMBER;
BEGIN
SELECT COUNT(*) INTO v_count FROM user_indexes WHERE index_name = 'IX_TB_FLASH_FATO_PERDA_ANOMES';
IF v_count = 0 THEN
EXECUTE IMMEDIATE 'CREATE INDEX IX_TB_FLASH_FATO_PERDA_ANOMES ON TB_FLASH_FATO_PERDA (ANO_REFERENCIA, MES_REFERENCIA)';
END IF;
END;
-- +goose StatementEnd
-- +goose StatementBegin
DECLARE
v_count NUMBER;
BEGIN
SELECT COUNT(*) INTO v_count FROM user_indexes WHERE index_name = 'IX_TB_FLASH_FATO_PERDA_NODO';
IF v_count = 0 THEN
EXECUTE IMMEDIATE 'CREATE INDEX IX_TB_FLASH_FATO_PERDA_NODO ON TB_FLASH_FATO_PERDA (ID_NODO)';
END IF;
END;
-- +goose StatementEnd
-- +goose StatementBegin
DECLARE
v_count NUMBER;
BEGIN
SELECT COUNT(*) INTO v_count FROM user_indexes WHERE index_name = 'IX_TB_FLASH_FATO_PERDA_EMP';
IF v_count = 0 THEN
EXECUTE IMMEDIATE 'CREATE INDEX IX_TB_FLASH_FATO_PERDA_EMP ON TB_FLASH_FATO_PERDA (COD_EMPRESA, ANO_REFERENCIA, MES_REFERENCIA)';
END IF;
END;
-- +goose StatementEnd
-- +goose StatementBegin
DECLARE
v_count NUMBER;
BEGIN
SELECT COUNT(*) INTO v_count FROM user_indexes WHERE index_name = 'IX_TB_FLASH_FATO_PERDA_PROD';
IF v_count = 0 THEN
EXECUTE IMMEDIATE 'CREATE INDEX IX_TB_FLASH_FATO_PERDA_PROD ON TB_FLASH_FATO_PERDA (COD_PRODUTO)';
END IF;
END;
-- +goose StatementEnd
-- +goose StatementBegin
DECLARE
v_count NUMBER;
BEGIN
SELECT COUNT(*) INTO v_count FROM user_constraints WHERE constraint_name = 'UK_TB_FLASH_FATO_PERDA';
IF v_count = 0 THEN
EXECUTE IMMEDIATE 'ALTER TABLE TB_FLASH_FATO_PERDA ADD CONSTRAINT UK_TB_FLASH_FATO_PERDA UNIQUE (DATA_REFERENCIA, COD_EMPRESA, COD_PRODUTO, NROSEGMENTO)';
END IF;
END;
-- +goose StatementEnd
-- +goose Down
-- +goose StatementBegin
DECLARE
v_count NUMBER;
BEGIN
SELECT COUNT(*) INTO v_count FROM user_tables WHERE table_name = 'TB_FLASH_FATO_PERDA';
IF v_count > 0 THEN
EXECUTE IMMEDIATE 'DROP TABLE TB_FLASH_FATO_PERDA CASCADE CONSTRAINTS PURGE';
END IF;
END;
-- +goose StatementEnd
@@ -0,0 +1,23 @@
-- +goose Up
-- +goose StatementBegin
DECLARE
v_count NUMBER;
BEGIN
SELECT COUNT(*) INTO v_count FROM user_sequences WHERE sequence_name = 'SEQ_TB_FLASH_META_PERDA';
IF v_count = 0 THEN
EXECUTE IMMEDIATE 'CREATE SEQUENCE SEQ_TB_FLASH_META_PERDA START WITH 1 INCREMENT BY 1 NOCACHE NOCYCLE';
END IF;
END;
-- +goose StatementEnd
-- +goose Down
-- +goose StatementBegin
DECLARE
v_count NUMBER;
BEGIN
SELECT COUNT(*) INTO v_count FROM user_sequences WHERE sequence_name = 'SEQ_TB_FLASH_META_PERDA';
IF v_count > 0 THEN
EXECUTE IMMEDIATE 'DROP SEQUENCE SEQ_TB_FLASH_META_PERDA';
END IF;
END;
-- +goose StatementEnd
@@ -0,0 +1,80 @@
-- +goose Up
-- +goose StatementBegin
DECLARE
v_count NUMBER;
BEGIN
SELECT COUNT(*) INTO v_count FROM user_tables WHERE table_name = 'TB_FLASH_META_PERDA';
IF v_count = 0 THEN
EXECUTE IMMEDIATE '
CREATE TABLE TB_FLASH_META_PERDA (
ID_META NUMBER NOT NULL,
ID_NODO NUMBER NOT NULL,
DATA_REFERENCIA DATE NOT NULL,
ANO_REFERENCIA NUMBER(4) NOT NULL,
MES_REFERENCIA NUMBER(2) NOT NULL,
DIA_REFERENCIA NUMBER(2) NOT NULL,
PERCENTUAL_META NUMBER(10,4),
VALOR_META NUMBER(18,6),
OBSERVACAO VARCHAR2(500),
DATA_CADASTRO DATE DEFAULT SYSDATE NOT NULL,
DATA_ATUALIZACAO DATE,
CONSTRAINT PK_TB_FLASH_META_PERDA PRIMARY KEY (ID_META),
CONSTRAINT FK_TB_FLASH_META_PERDA_NODO FOREIGN KEY (ID_NODO) REFERENCES TB_FLASH_NODO (ID_NODO),
CONSTRAINT CK_TB_FLASH_META_PERDA_MES CHECK (MES_REFERENCIA BETWEEN 1 AND 12),
CONSTRAINT CK_TB_FLASH_META_PERDA_DIA CHECK (DIA_REFERENCIA BETWEEN 1 AND 31)
)';
END IF;
END;
-- +goose StatementEnd
-- +goose StatementBegin
DECLARE
v_count NUMBER;
BEGIN
SELECT COUNT(*) INTO v_count FROM user_constraints WHERE constraint_name = 'UK_TB_FLASH_META_PERDA';
IF v_count = 0 THEN
EXECUTE IMMEDIATE 'ALTER TABLE TB_FLASH_META_PERDA ADD CONSTRAINT UK_TB_FLASH_META_PERDA UNIQUE (ID_NODO, DATA_REFERENCIA)';
END IF;
END;
-- +goose StatementEnd
-- +goose StatementBegin
DECLARE
v_count NUMBER;
BEGIN
SELECT COUNT(*) INTO v_count FROM user_indexes WHERE index_name = 'IX_TB_FLASH_META_PERDA_NODO';
IF v_count = 0 THEN
EXECUTE IMMEDIATE 'CREATE INDEX IX_TB_FLASH_META_PERDA_NODO ON TB_FLASH_META_PERDA (ID_NODO)';
END IF;
END;
-- +goose StatementEnd
-- +goose StatementBegin
DECLARE
v_count NUMBER;
BEGIN
SELECT COUNT(*) INTO v_count FROM user_indexes WHERE index_name = 'IX_TB_FLASH_META_PERDA_DATA';
IF v_count = 0 THEN
EXECUTE IMMEDIATE 'CREATE INDEX IX_TB_FLASH_META_PERDA_DATA ON TB_FLASH_META_PERDA (DATA_REFERENCIA)';
END IF;
END;
-- +goose StatementEnd
-- +goose StatementBegin
DECLARE
v_count NUMBER;
BEGIN
SELECT COUNT(*) INTO v_count FROM user_indexes WHERE index_name = 'IX_TB_FLASH_META_PERDA_AMSD';
IF v_count = 0 THEN
EXECUTE IMMEDIATE 'CREATE INDEX IX_TB_FLASH_META_PERDA_AMSD ON TB_FLASH_META_PERDA (ANO_REFERENCIA, MES_REFERENCIA, DIA_REFERENCIA)';
END IF;
END;
-- +goose StatementEnd
-- +goose Down
-- +goose StatementBegin
DECLARE
v_count NUMBER;
BEGIN
SELECT COUNT(*) INTO v_count FROM user_tables WHERE table_name = 'TB_FLASH_META_PERDA';
IF v_count > 0 THEN
EXECUTE IMMEDIATE 'DROP TABLE TB_FLASH_META_PERDA CASCADE CONSTRAINTS PURGE';
END IF;
END;
-- +goose StatementEnd
@@ -0,0 +1,73 @@
-- +goose Up
-- +goose StatementBegin
DECLARE
v_count NUMBER;
BEGIN
SELECT COUNT(*) INTO v_count FROM user_tables WHERE table_name = 'TB_FLASH_META_PERDA_STG';
IF v_count = 0 THEN
EXECUTE IMMEDIATE '
CREATE TABLE TB_FLASH_META_PERDA_STG (
COD_EMPRESA NUMBER NOT NULL,
TIPO_NODO VARCHAR2(30) NOT NULL,
CODIGO_NODO VARCHAR2(60) NOT NULL,
CODIGO_NODO_PAI VARCHAR2(60),
TIPO_NODO_PAI VARCHAR2(30),
DATA_REFERENCIA DATE NOT NULL,
ANO_REFERENCIA NUMBER(4) NOT NULL,
MES_REFERENCIA NUMBER(2) NOT NULL,
DIA_REFERENCIA NUMBER(2) NOT NULL,
PERCENTUAL_META NUMBER(10,4),
VALOR_META NUMBER(18,6),
OBSERVACAO VARCHAR2(500),
ORIGEM_META VARCHAR2(100),
DATA_CARGA DATE DEFAULT SYSDATE,
CONSTRAINT CK_TB_FLASH_META_PRD_STG_TIPO CHECK (TIPO_NODO IN (''EMPRESA'', ''CATEGORIA'', ''PRODUTO'')),
CONSTRAINT CK_TB_FLASH_META_PRD_STG_TPAI CHECK (TIPO_NODO_PAI IN (''EMPRESA'', ''CATEGORIA'', ''PRODUTO'') OR TIPO_NODO_PAI IS NULL),
CONSTRAINT CK_TB_FLASH_META_PRD_STG_MES CHECK (MES_REFERENCIA BETWEEN 1 AND 12),
CONSTRAINT CK_TB_FLASH_META_PRD_STG_DIA CHECK (DIA_REFERENCIA BETWEEN 1 AND 31)
)';
END IF;
END;
-- +goose StatementEnd
-- +goose StatementBegin
DECLARE
v_count NUMBER;
BEGIN
SELECT COUNT(*) INTO v_count FROM user_indexes WHERE index_name = 'IX_TB_FLASH_META_PRD_STG_01';
IF v_count = 0 THEN
EXECUTE IMMEDIATE 'CREATE INDEX IX_TB_FLASH_META_PRD_STG_01 ON TB_FLASH_META_PERDA_STG (COD_EMPRESA, DATA_REFERENCIA)';
END IF;
END;
-- +goose StatementEnd
-- +goose StatementBegin
DECLARE
v_count NUMBER;
BEGIN
SELECT COUNT(*) INTO v_count FROM user_indexes WHERE index_name = 'IX_TB_FLASH_META_PRD_STG_02';
IF v_count = 0 THEN
EXECUTE IMMEDIATE 'CREATE INDEX IX_TB_FLASH_META_PRD_STG_02 ON TB_FLASH_META_PERDA_STG (TIPO_NODO, CODIGO_NODO, CODIGO_NODO_PAI)';
END IF;
END;
-- +goose StatementEnd
-- +goose StatementBegin
DECLARE
v_count NUMBER;
BEGIN
SELECT COUNT(*) INTO v_count FROM user_indexes WHERE index_name = 'IX_TB_FLASH_META_PRD_STG_03';
IF v_count = 0 THEN
EXECUTE IMMEDIATE 'CREATE INDEX IX_TB_FLASH_META_PRD_STG_03 ON TB_FLASH_META_PERDA_STG (ORIGEM_META)';
END IF;
END;
-- +goose StatementEnd
-- +goose Down
-- +goose StatementBegin
DECLARE
v_count NUMBER;
BEGIN
SELECT COUNT(*) INTO v_count FROM user_tables WHERE table_name = 'TB_FLASH_META_PERDA_STG';
IF v_count > 0 THEN
EXECUTE IMMEDIATE 'DROP TABLE TB_FLASH_META_PERDA_STG CASCADE CONSTRAINTS PURGE';
END IF;
END;
-- +goose StatementEnd
@@ -0,0 +1,32 @@
-- +goose Up
-- +goose StatementBegin
CREATE OR REPLACE VIEW VW_FLASH_META_PERDA_STG AS
SELECT
CAST(NULL AS NUMBER) AS cod_empresa,
CAST(NULL AS VARCHAR2(30)) AS tipo_nodo,
CAST(NULL AS VARCHAR2(60)) AS codigo_nodo,
CAST(NULL AS VARCHAR2(60)) AS codigo_nodo_pai,
CAST(NULL AS VARCHAR2(30)) AS tipo_nodo_pai,
CAST(NULL AS DATE) AS data_referencia,
CAST(NULL AS NUMBER(4)) AS ano_referencia,
CAST(NULL AS NUMBER(2)) AS mes_referencia,
CAST(NULL AS NUMBER(2)) AS dia_referencia,
CAST(NULL AS NUMBER(10,4)) AS percentual_meta,
CAST(NULL AS NUMBER(18,6)) AS valor_meta,
CAST(NULL AS VARCHAR2(500)) AS observacao,
CAST(NULL AS VARCHAR2(100)) AS origem_meta
FROM dual
WHERE 1 = 0
-- +goose StatementEnd
-- +goose Down
-- +goose StatementBegin
DECLARE
v_count NUMBER;
BEGIN
SELECT COUNT(*) INTO v_count FROM user_objects WHERE object_name = 'VW_FLASH_META_PERDA_STG' AND object_type = 'VIEW';
IF v_count > 0 THEN
EXECUTE IMMEDIATE 'DROP VIEW VW_FLASH_META_PERDA_STG';
END IF;
END;
-- +goose StatementEnd
@@ -0,0 +1,23 @@
-- +goose Up
-- +goose StatementBegin
DECLARE
v_count NUMBER;
BEGIN
SELECT COUNT(*) INTO v_count FROM user_sequences WHERE sequence_name = 'SEQ_TB_FLASH_NODO_RESUMO_PERDA';
IF v_count = 0 THEN
EXECUTE IMMEDIATE 'CREATE SEQUENCE SEQ_TB_FLASH_NODO_RESUMO_PERDA START WITH 1 INCREMENT BY 1 NOCACHE NOCYCLE';
END IF;
END;
-- +goose StatementEnd
-- +goose Down
-- +goose StatementBegin
DECLARE
v_count NUMBER;
BEGIN
SELECT COUNT(*) INTO v_count FROM user_sequences WHERE sequence_name = 'SEQ_TB_FLASH_NODO_RESUMO_PERDA';
IF v_count > 0 THEN
EXECUTE IMMEDIATE 'DROP SEQUENCE SEQ_TB_FLASH_NODO_RESUMO_PERDA';
END IF;
END;
-- +goose StatementEnd
@@ -0,0 +1,85 @@
-- +goose Up
-- +goose StatementBegin
DECLARE
v_count NUMBER;
BEGIN
SELECT COUNT(*) INTO v_count FROM user_tables WHERE table_name = 'TB_FLASH_NODO_RESUMO_PERDA';
IF v_count = 0 THEN
EXECUTE IMMEDIATE '
CREATE TABLE TB_FLASH_NODO_RESUMO_PERDA (
ID_RESUMO NUMBER NOT NULL,
ID_NODO NUMBER NOT NULL,
DATA_REFERENCIA DATE NOT NULL,
ANO_REFERENCIA NUMBER(4) NOT NULL,
MES_REFERENCIA NUMBER(2) NOT NULL,
DIA_REFERENCIA NUMBER(2) NOT NULL,
VALOR_VENDA NUMBER(18,6),
VALOR_META_PROPRIA NUMBER(18,6),
VALOR_META_FILHOS NUMBER(18,6),
VALOR_META_EFETIVA NUMBER(18,6),
PERCENTUAL_META_PROPRIA NUMBER(10,4),
PERCENTUAL_META_FILHOS NUMBER(10,4),
PERCENTUAL_META_EFETIVA NUMBER(10,4),
DESVIO NUMBER(18,6),
PERCENTUAL_ATINGIMENTO NUMBER(18,6),
DATA_APURACAO DATE DEFAULT SYSDATE NOT NULL,
CONSTRAINT PK_TB_FLASH_NODO_RES_PERDA PRIMARY KEY (ID_RESUMO),
CONSTRAINT FK_TB_FLASH_NODO_RES_PERDA_NODO FOREIGN KEY (ID_NODO) REFERENCES TB_FLASH_NODO (ID_NODO),
CONSTRAINT CK_TB_FLASH_NODO_RES_PERDA_MES CHECK (MES_REFERENCIA BETWEEN 1 AND 12),
CONSTRAINT CK_TB_FLASH_NODO_RES_PERDA_DIA CHECK (DIA_REFERENCIA BETWEEN 1 AND 31)
)';
END IF;
END;
-- +goose StatementEnd
-- +goose StatementBegin
DECLARE
v_count NUMBER;
BEGIN
SELECT COUNT(*) INTO v_count FROM user_constraints WHERE constraint_name = 'UK_TB_FLASH_NODO_RES_PERDA';
IF v_count = 0 THEN
EXECUTE IMMEDIATE 'ALTER TABLE TB_FLASH_NODO_RESUMO_PERDA ADD CONSTRAINT UK_TB_FLASH_NODO_RES_PERDA UNIQUE (ID_NODO, DATA_REFERENCIA)';
END IF;
END;
-- +goose StatementEnd
-- +goose StatementBegin
DECLARE
v_count NUMBER;
BEGIN
SELECT COUNT(*) INTO v_count FROM user_indexes WHERE index_name = 'IX_TB_FLASH_NODO_RES_PERDA_NODO';
IF v_count = 0 THEN
EXECUTE IMMEDIATE 'CREATE INDEX IX_TB_FLASH_NODO_RES_PERDA_NODO ON TB_FLASH_NODO_RESUMO_PERDA (ID_NODO)';
END IF;
END;
-- +goose StatementEnd
-- +goose StatementBegin
DECLARE
v_count NUMBER;
BEGIN
SELECT COUNT(*) INTO v_count FROM user_indexes WHERE index_name = 'IX_TB_FLASH_NODO_RES_PERDA_DATA';
IF v_count = 0 THEN
EXECUTE IMMEDIATE 'CREATE INDEX IX_TB_FLASH_NODO_RES_PERDA_DATA ON TB_FLASH_NODO_RESUMO_PERDA (DATA_REFERENCIA)';
END IF;
END;
-- +goose StatementEnd
-- +goose StatementBegin
DECLARE
v_count NUMBER;
BEGIN
SELECT COUNT(*) INTO v_count FROM user_indexes WHERE index_name = 'IX_TB_FLASH_NODO_RES_PERDA_AMSD';
IF v_count = 0 THEN
EXECUTE IMMEDIATE 'CREATE INDEX IX_TB_FLASH_NODO_RES_PERDA_AMSD ON TB_FLASH_NODO_RESUMO_PERDA (ANO_REFERENCIA, MES_REFERENCIA, DIA_REFERENCIA)';
END IF;
END;
-- +goose StatementEnd
-- +goose Down
-- +goose StatementBegin
DECLARE
v_count NUMBER;
BEGIN
SELECT COUNT(*) INTO v_count FROM user_tables WHERE table_name = 'TB_FLASH_NODO_RESUMO_PERDA';
IF v_count > 0 THEN
EXECUTE IMMEDIATE 'DROP TABLE TB_FLASH_NODO_RESUMO_PERDA CASCADE CONSTRAINTS PURGE';
END IF;
END;
-- +goose StatementEnd
@@ -0,0 +1,36 @@
-- +goose Up
-- +goose StatementBegin
CREATE OR REPLACE PROCEDURE PRC_FLASH_CARGA_META_PERDA_STG (
p_data_inicial IN DATE,
p_data_final IN DATE
) AS
BEGIN
DELETE FROM TB_FLASH_META_PERDA_STG
WHERE data_referencia BETWEEN p_data_inicial AND p_data_final;
INSERT INTO TB_FLASH_META_PERDA_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_PERDA_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_PERDA_STG' AND object_type = 'PROCEDURE';
IF v_count > 0 THEN
EXECUTE IMMEDIATE 'DROP PROCEDURE PRC_FLASH_CARGA_META_PERDA_STG';
END IF;
END;
-- +goose StatementEnd
@@ -0,0 +1,109 @@
-- +goose Up
-- +goose StatementBegin
CREATE OR REPLACE PROCEDURE 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
@@ -0,0 +1,107 @@
-- +goose Up
-- +goose StatementBegin
CREATE OR REPLACE PROCEDURE PRC_FLASH_CARGA_RESUMO_PERDA (
p_data_inicial IN DATE,
p_data_final IN DATE
) AS
BEGIN
DELETE FROM TB_FLASH_NODO_RESUMO_PERDA
WHERE data_referencia BETWEEN p_data_inicial AND p_data_final;
INSERT INTO TB_FLASH_NODO_RESUMO_PERDA (
id_resumo, id_nodo, data_referencia, ano_referencia, mes_referencia, dia_referencia,
valor_venda, valor_meta_propria, valor_meta_filhos, valor_meta_efetiva,
percentual_meta_propria, percentual_meta_filhos, percentual_meta_efetiva,
desvio, percentual_atingimento, data_apuracao
)
WITH datas AS (
SELECT TRUNC(p_data_inicial) + LEVEL - 1 AS data_referencia
FROM dual
CONNECT BY TRUNC(p_data_inicial) + LEVEL - 1 <= TRUNC(p_data_final)
),
perda_direta AS (
SELECT f.id_nodo, TRUNC(f.data_referencia) AS data_referencia,
f.ano_referencia, f.mes_referencia, f.dia_referencia,
SUM(f.vlr_perda) AS valor_perda
FROM TB_FLASH_FATO_PERDA f
WHERE f.data_referencia BETWEEN p_data_inicial AND p_data_final
GROUP BY f.id_nodo, TRUNC(f.data_referencia), f.ano_referencia, f.mes_referencia, f.dia_referencia
),
perda_hierarquia AS (
SELECT a.id_nodo_ancestral AS id_nodo,
d.data_referencia,
EXTRACT(YEAR FROM d.data_referencia) AS ano_referencia,
EXTRACT(MONTH FROM d.data_referencia) AS mes_referencia,
EXTRACT(DAY FROM d.data_referencia) AS dia_referencia,
SUM(NVL(pd.valor_perda, 0)) AS valor_perda
FROM (
SELECT CONNECT_BY_ROOT n.id_nodo AS id_nodo_ancestral,
n.id_nodo AS id_nodo_descendente
FROM TB_FLASH_NODO n
CONNECT BY PRIOR n.id_nodo = n.id_nodo_pai
) a
CROSS JOIN datas d
LEFT JOIN perda_direta pd
ON pd.id_nodo = a.id_nodo_descendente
AND pd.data_referencia = d.data_referencia
GROUP BY a.id_nodo_ancestral, d.data_referencia
),
meta_propria_diaria AS (
SELECT m.id_nodo, m.data_referencia, m.ano_referencia, m.mes_referencia, m.dia_referencia,
MAX(m.percentual_meta) AS percentual_meta_propria,
SUM(m.valor_meta) AS valor_meta_propria
FROM TB_FLASH_META_PERDA m
WHERE m.data_referencia BETWEEN p_data_inicial AND p_data_final
GROUP BY m.id_nodo, m.data_referencia, m.ano_referencia, m.mes_referencia, m.dia_referencia
),
meta_filhos_diaria AS (
SELECT pai.id_nodo, mpd.data_referencia, mpd.ano_referencia, mpd.mes_referencia, mpd.dia_referencia,
SUM(mpd.valor_meta_propria) AS valor_meta_filhos
FROM TB_FLASH_NODO pai
JOIN TB_FLASH_NODO filho ON filho.id_nodo_pai = pai.id_nodo
JOIN meta_propria_diaria mpd ON mpd.id_nodo = filho.id_nodo
GROUP BY pai.id_nodo, mpd.data_referencia, mpd.ano_referencia, mpd.mes_referencia, mpd.dia_referencia
),
base AS (
SELECT n.id_nodo, d.data_referencia,
EXTRACT(YEAR FROM d.data_referencia) AS ano_referencia,
EXTRACT(MONTH FROM d.data_referencia) AS mes_referencia,
EXTRACT(DAY FROM d.data_referencia) AS dia_referencia
FROM TB_FLASH_NODO n
CROSS JOIN datas d
)
SELECT SEQ_TB_FLASH_NODO_RESUMO_PERDA.NEXTVAL,
b.id_nodo, b.data_referencia, b.ano_referencia, b.mes_referencia, b.dia_referencia,
ph.valor_perda,
mpd.valor_meta_propria,
mfd.valor_meta_filhos,
CASE WHEN mpd.valor_meta_propria IS NOT NULL THEN mpd.valor_meta_propria ELSE mfd.valor_meta_filhos END,
mpd.percentual_meta_propria,
CAST(NULL AS NUMBER(10,4)),
CASE WHEN mpd.percentual_meta_propria IS NOT NULL THEN mpd.percentual_meta_propria ELSE NULL END,
NVL(ph.valor_perda, 0) - NVL(CASE WHEN mpd.valor_meta_propria IS NOT NULL THEN mpd.valor_meta_propria ELSE mfd.valor_meta_filhos END, 0),
CASE
WHEN NVL(CASE WHEN mpd.valor_meta_propria IS NOT NULL THEN mpd.valor_meta_propria ELSE mfd.valor_meta_filhos END, 0) = 0 THEN NULL
ELSE (NVL(ph.valor_perda, 0) / CASE WHEN mpd.valor_meta_propria IS NOT NULL THEN mpd.valor_meta_propria ELSE mfd.valor_meta_filhos END) * 100
END,
SYSDATE
FROM base b
LEFT JOIN perda_hierarquia ph ON ph.id_nodo = b.id_nodo AND ph.data_referencia = b.data_referencia
LEFT JOIN meta_propria_diaria mpd ON mpd.id_nodo = b.id_nodo AND mpd.data_referencia = b.data_referencia
LEFT JOIN meta_filhos_diaria mfd ON mfd.id_nodo = b.id_nodo AND mfd.data_referencia = b.data_referencia;
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_RESUMO_PERDA' AND object_type = 'PROCEDURE';
IF v_count > 0 THEN
EXECUTE IMMEDIATE 'DROP PROCEDURE PRC_FLASH_CARGA_RESUMO_PERDA';
END IF;
END;
-- +goose StatementEnd
@@ -0,0 +1,81 @@
-- +goose Up
-- +goose StatementBegin
CREATE OR REPLACE PROCEDURE VITRUVIO.PRC_FLASH_ATUALIZA_PERDA_DONO (
p_data_inicial IN DATE,
p_data_final IN DATE,
p_empresa_ini IN NUMBER DEFAULT NULL,
p_empresa_fim IN NUMBER DEFAULT NULL
) AS
v_inicio_execucao DATE := SYSDATE;
BEGIN
DBMS_OUTPUT.PUT_LINE('Iniciando PRC_FLASH_ATUALIZA_PERDA_DONO em ' || TO_CHAR(v_inicio_execucao, 'DD/MM/YYYY HH24:MI:SS'));
DBMS_OUTPUT.PUT_LINE('Período: ' || TO_CHAR(p_data_inicial, 'DD/MM/YYYY') || ' até ' || TO_CHAR(p_data_final, 'DD/MM/YYYY'));
FOR r IN (
SELECT codigo
FROM vitruvio.vi_lojas
WHERE codigo NOT IN (301, 401, 500)
AND (p_empresa_ini IS NULL OR codigo >= p_empresa_ini)
AND (p_empresa_fim IS NULL OR codigo <= p_empresa_fim)
ORDER BY codigo
) LOOP
BEGIN
DBMS_OUTPUT.PUT_LINE('Carregando perda da empresa: ' || r.codigo);
PRC_FLASH_CARGA_DADOS_PERDA(
p_data_inicial => p_data_inicial,
p_data_final => p_data_final,
p_empresa => r.codigo
);
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE(
'Erro ao carregar empresa ' || r.codigo || ': ' || SQLERRM
);
RAISE;
END;
END LOOP;
DBMS_OUTPUT.PUT_LINE('Carregando stage de metas de perda...');
PRC_FLASH_CARGA_META_PERDA_STG(
p_data_inicial => p_data_inicial,
p_data_final => p_data_final
);
DBMS_OUTPUT.PUT_LINE('Carregando metas finais de perda...');
PRC_FLASH_CARGA_META_PERDA(
p_data_inicial => p_data_inicial,
p_data_final => p_data_final
);
DBMS_OUTPUT.PUT_LINE('Atualizando resumo de perda...');
PRC_FLASH_CARGA_RESUMO_PERDA(
p_data_inicial => p_data_inicial,
p_data_final => p_data_final
);
DBMS_OUTPUT.PUT_LINE('PRC_FLASH_ATUALIZA_PERDA_DONO finalizada em ' || TO_CHAR(SYSDATE, 'DD/MM/YYYY HH24:MI:SS'));
DBMS_OUTPUT.PUT_LINE('Tempo em segundos: ' || ROUND((SYSDATE - v_inicio_execucao) * 86400, 2));
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('Erro geral na PRC_FLASH_ATUALIZA_PERDA_DONO: ' || SQLERRM);
RAISE;
END;
-- +goose StatementEnd
-- +goose Down
-- +goose StatementBegin
DECLARE
v_count NUMBER;
BEGIN
SELECT COUNT(*) INTO v_count FROM all_objects WHERE object_name = 'PRC_FLASH_ATUALIZA_PERDA_DONO' AND object_type = 'PROCEDURE' AND owner = 'VITRUVIO';
IF v_count > 0 THEN
EXECUTE IMMEDIATE 'DROP PROCEDURE VITRUVIO.PRC_FLASH_ATUALIZA_PERDA_DONO';
END IF;
END;
-- +goose StatementEnd
@@ -0,0 +1,186 @@
-- +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
) AS
v_id_empresa NUMBER;
v_id_cat1 NUMBER;
v_id_cat2 NUMBER;
v_id_cat3 NUMBER;
v_id_cat4 NUMBER;
v_id_cat5 NUMBER;
v_id_produto NUMBER;
FUNCTION FN_GET_OR_CREATE_NODO (
p_id_nodo_pai IN NUMBER,
p_tipo_nodo IN VARCHAR2,
p_codigo IN VARCHAR2,
p_nome IN VARCHAR2,
p_nivel IN NUMBER,
p_cod_empresa IN NUMBER DEFAULT NULL,
p_cod_produto IN NUMBER DEFAULT NULL,
p_seqprodutobase IN NUMBER DEFAULT NULL
) RETURN NUMBER
IS
v_id_nodo NUMBER;
BEGIN
SELECT n.id_nodo
INTO v_id_nodo
FROM TB_FLASH_NODO n
WHERE (
n.id_nodo_pai = p_id_nodo_pai
OR (n.id_nodo_pai IS NULL AND p_id_nodo_pai IS NULL)
)
AND n.tipo_nodo = p_tipo_nodo
AND n.codigo = p_codigo
AND (
p_tipo_nodo <> 'PRODUTO'
OR (
n.cod_empresa = p_cod_empresa
OR (n.cod_empresa IS NULL AND p_cod_empresa IS NULL)
)
);
UPDATE TB_FLASH_NODO n
SET n.nome = p_nome,
n.cod_empresa = p_cod_empresa,
n.cod_produto = p_cod_produto,
n.seqprodutobase = p_seqprodutobase,
n.data_atualizacao = SYSDATE
WHERE n.id_nodo = v_id_nodo
AND (
NVL(n.nome, '#') <> NVL(p_nome, '#')
OR NVL(n.cod_empresa, -1) <> NVL(p_cod_empresa, -1)
OR NVL(n.cod_produto, -1) <> NVL(p_cod_produto, -1)
OR NVL(n.seqprodutobase, -1) <> NVL(p_seqprodutobase, -1)
);
RETURN v_id_nodo;
EXCEPTION
WHEN NO_DATA_FOUND THEN
v_id_nodo := SEQ_TB_FLASH_NODO.NEXTVAL;
INSERT INTO TB_FLASH_NODO (
id_nodo, id_nodo_pai, tipo_nodo, codigo, nome, nivel,
ordem_exibicao, ativo, cod_empresa, cod_produto, seqprodutobase,
data_cadastro, data_atualizacao
) VALUES (
v_id_nodo, p_id_nodo_pai, p_tipo_nodo, p_codigo, p_nome, p_nivel,
NULL, 'S', p_cod_empresa, p_cod_produto, p_seqprodutobase,
SYSDATE, NULL
);
RETURN v_id_nodo;
END;
BEGIN
DELETE FROM TB_FLASH_FATO_PERDA
WHERE data_referencia BETWEEN p_data_inicial AND p_data_final
AND cod_empresa = p_empresa;
FOR r IN (
SELECT
e.nroempresa AS empresa,
e.nomereduzido AS nomeempresa,
a.seqproduto AS cod_produto,
a.seqprodutobase,
a.desccompleta AS descricao,
d.nrodivisao,
seg1.nrosegmento,
p.dtamovimento AS data_referencia,
TO_NUMBER(TO_CHAR(p.dtamovimento, 'DD')) AS dia,
TO_NUMBER(TO_CHAR(p.dtamovimento, 'MM')) AS mes,
TO_NUMBER(TO_CHAR(p.dtamovimento, 'YYYY')) AS ano,
TO_NUMBER(TO_CHAR(p.dtamovimento, 'D')) AS dia_semana,
SUM(p.qtdperda) AS qtde_perda,
SUM(p.vlrperda) AS vlr_perda,
SUM(p.vlrcustoperda) AS vlr_custo_perda,
a.propqtdprodutobase,
( SELECT dc.seqcategoria FROM map_famdivcateg dc JOIN map_categoria cc ON cc.seqcategoria = dc.seqcategoria AND cc.statuscategor = 'A' AND cc.nivelhierarquia = 1 AND cc.nrodivisao = dc.nrodivisao AND cc.tipcategoria = 'M' WHERE dc.nrodivisao = e.nrodivisao AND dc.status = 'A' AND dc.seqfamilia = a.seqfamilia ) AS codcatn1,
( SELECT cc.categoria FROM map_famdivcateg dc JOIN map_categoria cc ON cc.seqcategoria = dc.seqcategoria AND cc.statuscategor = 'A' AND cc.nivelhierarquia = 1 AND cc.nrodivisao = dc.nrodivisao AND cc.tipcategoria = 'M' WHERE dc.nrodivisao = e.nrodivisao AND dc.status = 'A' AND dc.seqfamilia = a.seqfamilia ) AS nomecatn1,
( SELECT dc.seqcategoria FROM map_famdivcateg dc JOIN map_categoria cc ON cc.seqcategoria = dc.seqcategoria AND cc.statuscategor = 'A' AND cc.nivelhierarquia = 2 AND cc.nrodivisao = dc.nrodivisao AND cc.tipcategoria = 'M' WHERE dc.nrodivisao = e.nrodivisao AND dc.status = 'A' AND dc.seqfamilia = a.seqfamilia ) AS codcatn2,
( SELECT cc.categoria FROM map_famdivcateg dc JOIN map_categoria cc ON cc.seqcategoria = dc.seqcategoria AND cc.statuscategor = 'A' AND cc.nivelhierarquia = 2 AND cc.nrodivisao = dc.nrodivisao AND cc.tipcategoria = 'M' WHERE dc.nrodivisao = e.nrodivisao AND dc.status = 'A' AND dc.seqfamilia = a.seqfamilia ) AS nomecatn2,
( SELECT dc.seqcategoria FROM map_famdivcateg dc JOIN map_categoria cc ON cc.seqcategoria = dc.seqcategoria AND cc.statuscategor = 'A' AND cc.nivelhierarquia = 3 AND cc.nrodivisao = dc.nrodivisao AND cc.tipcategoria = 'M' WHERE dc.nrodivisao = e.nrodivisao AND dc.status = 'A' AND dc.seqfamilia = a.seqfamilia ) AS codcatn3,
( SELECT cc.categoria FROM map_famdivcateg dc JOIN map_categoria cc ON cc.seqcategoria = dc.seqcategoria AND cc.statuscategor = 'A' AND cc.nivelhierarquia = 3 AND cc.nrodivisao = dc.nrodivisao AND cc.tipcategoria = 'M' WHERE dc.nrodivisao = e.nrodivisao AND dc.status = 'A' AND dc.seqfamilia = a.seqfamilia ) AS nomecatn3,
( SELECT dc.seqcategoria FROM map_famdivcateg dc JOIN map_categoria cc ON cc.seqcategoria = dc.seqcategoria AND cc.statuscategor = 'A' AND cc.nivelhierarquia = 4 AND cc.nrodivisao = dc.nrodivisao AND cc.tipcategoria = 'M' WHERE dc.nrodivisao = e.nrodivisao AND dc.status = 'A' AND dc.seqfamilia = a.seqfamilia ) AS codcatn4,
( SELECT cc.categoria FROM map_famdivcateg dc JOIN map_categoria cc ON cc.seqcategoria = dc.seqcategoria AND cc.statuscategor = 'A' AND cc.nivelhierarquia = 4 AND cc.nrodivisao = dc.nrodivisao AND cc.tipcategoria = 'M' WHERE dc.nrodivisao = e.nrodivisao AND dc.status = 'A' AND dc.seqfamilia = a.seqfamilia ) AS nomecatn4,
( SELECT dc.seqcategoria FROM map_famdivcateg dc JOIN map_categoria cc ON cc.seqcategoria = dc.seqcategoria AND cc.statuscategor = 'A' AND cc.nivelhierarquia = 5 AND cc.nrodivisao = dc.nrodivisao AND cc.tipcategoria = 'M' WHERE dc.nrodivisao = e.nrodivisao AND dc.status = 'A' AND dc.seqfamilia = a.seqfamilia ) AS codcatn5,
( SELECT cc.categoria FROM map_famdivcateg dc JOIN map_categoria cc ON cc.seqcategoria = dc.seqcategoria AND cc.statuscategor = 'A' AND cc.nivelhierarquia = 5 AND cc.nrodivisao = dc.nrodivisao AND cc.tipcategoria = 'M' WHERE dc.nrodivisao = e.nrodivisao AND dc.status = 'A' AND dc.seqfamilia = a.seqfamilia ) AS nomecatn5
FROM max_empresa e
JOIN mar_perda p
ON p.nroempresa = e.nroempresa
JOIN map_produto a
ON a.seqproduto = p.seqproduto
JOIN map_famdivisao d
ON d.seqfamilia = a.seqfamilia
AND d.nrodivisao = e.nrodivisao
JOIN mad_famsegmento h
ON h.seqfamilia = a.seqfamilia
AND h.nrosegmento = e.nrosegmentoprinc
JOIN mad_segmento seg1
ON seg1.nrosegmento = h.nrosegmento
AND seg1.nrodivisao = d.nrodivisao
WHERE p.dtamovimento BETWEEN p_data_inicial AND p_data_final
AND p.nroempresa = p_empresa
GROUP BY e.nroempresa, e.nomereduzido, a.seqproduto, a.seqprodutobase,
a.desccompleta, d.nrodivisao, seg1.nrosegmento, p.dtamovimento,
a.propqtdprodutobase, a.seqfamilia, e.nrodivisao
) LOOP
v_id_empresa := FN_GET_OR_CREATE_NODO(NULL, 'EMPRESA', TO_CHAR(r.empresa), r.nomeempresa, 1, r.empresa);
IF r.codcatn1 IS NOT NULL THEN
v_id_cat1 := FN_GET_OR_CREATE_NODO(v_id_empresa, 'CATEGORIA', TO_CHAR(r.codcatn1), r.nomecatn1, 2, r.empresa);
ELSE v_id_cat1 := v_id_empresa; END IF;
IF r.codcatn2 IS NOT NULL THEN
v_id_cat2 := FN_GET_OR_CREATE_NODO(v_id_cat1, 'CATEGORIA', TO_CHAR(r.codcatn2), r.nomecatn2, 3, r.empresa);
ELSE v_id_cat2 := v_id_cat1; END IF;
IF r.codcatn3 IS NOT NULL THEN
v_id_cat3 := FN_GET_OR_CREATE_NODO(v_id_cat2, 'CATEGORIA', TO_CHAR(r.codcatn3), r.nomecatn3, 4, r.empresa);
ELSE v_id_cat3 := v_id_cat2; END IF;
IF r.codcatn4 IS NOT NULL THEN
v_id_cat4 := FN_GET_OR_CREATE_NODO(v_id_cat3, 'CATEGORIA', TO_CHAR(r.codcatn4), r.nomecatn4, 5, r.empresa);
ELSE v_id_cat4 := v_id_cat3; END IF;
IF r.codcatn5 IS NOT NULL THEN
v_id_cat5 := FN_GET_OR_CREATE_NODO(v_id_cat4, 'CATEGORIA', TO_CHAR(r.codcatn5), r.nomecatn5, 6, r.empresa);
ELSE v_id_cat5 := v_id_cat4; END IF;
v_id_produto := FN_GET_OR_CREATE_NODO(v_id_cat5, 'PRODUTO', TO_CHAR(r.cod_produto), r.descricao, 7, r.empresa, r.cod_produto, r.seqprodutobase);
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, vlr_custo_perda, qtde_perda,
vlr_perda, propqtdprodutobase, data_cadastro
) VALUES (
SEQ_TB_FLASH_FATO_PERDA.NEXTVAL,
r.data_referencia, r.ano, r.mes, r.dia, r.dia_semana,
v_id_produto, v_id_empresa, r.empresa, r.nomeempresa, r.cod_produto, r.descricao,
r.seqprodutobase, r.nrodivisao, r.nrosegmento, r.vlr_custo_perda,
r.qtde_perda, r.vlr_perda, r.propqtdprodutobase, SYSDATE
);
END LOOP;
COMMIT;
END;
-- +goose StatementEnd
-- +goose Down
-- +goose StatementBegin
DECLARE
v_count NUMBER;
BEGIN
SELECT COUNT(*) INTO v_count FROM all_objects WHERE object_name = 'PRC_FLASH_CARGA_DADOS_PERDA' AND object_type = 'PROCEDURE' AND owner = 'VITRUVIO';
IF v_count > 0 THEN
EXECUTE IMMEDIATE 'DROP PROCEDURE VITRUVIO.PRC_FLASH_CARGA_DADOS_PERDA';
END IF;
END;
-- +goose StatementEnd