Primeiro commit do projeto
davinTI/app-dono-modulos/pipeline/head There was a failure building this commit

This commit is contained in:
2026-04-22 15:17:14 -03:00
parent 137ebdece2
commit 9f6201f0af
14 changed files with 756 additions and 0 deletions
@@ -0,0 +1,26 @@
-- +goose Up
DECLARE
v_count NUMBER;
BEGIN
SELECT COUNT(*) INTO v_count
FROM USER_SEQUENCES
WHERE SEQUENCE_NAME = 'SEQ_FLASH_PERDAS';
IF v_count = 0 THEN
EXECUTE IMMEDIATE 'CREATE SEQUENCE SEQ_FLASH_PERDAS
START WITH 1 INCREMENT BY 1 NOCACHE NOCYCLE';
END IF;
END;
-- +goose Down
DECLARE
v_count NUMBER;
BEGIN
SELECT COUNT(*) INTO v_count
FROM USER_SEQUENCES
WHERE SEQUENCE_NAME = 'SEQ_FLASH_PERDAS';
IF v_count > 0 THEN
EXECUTE IMMEDIATE 'DROP SEQUENCE SEQ_FLASH_PERDAS';
END IF;
END;
@@ -0,0 +1,52 @@
-- +goose Up
DECLARE
v_count NUMBER;
BEGIN
SELECT COUNT(*) INTO v_count
FROM USER_TABLES
WHERE TABLE_NAME = 'TB_FLASH_PERDAS';
IF v_count = 0 THEN
EXECUTE IMMEDIATE 'CREATE TABLE TB_FLASH_PERDAS (
ID NUMBER NOT NULL
CONSTRAINT PK_FLASH_PERDAS PRIMARY KEY,
NUMERO_LOJA NUMBER(10) NOT NULL,
NOME_LOJA VARCHAR2(200) NOT NULL,
CODIGO_CATEGORIA_N1 VARCHAR2(50),
NOME_CATEGORIA_N1 VARCHAR2(200),
CODIGO_CATEGORIA_N2 VARCHAR2(50),
NOME_CATEGORIA_N2 VARCHAR2(200),
CODIGO_CATEGORIA_N3 VARCHAR2(50),
NOME_CATEGORIA_N3 VARCHAR2(200),
CODIGO_CATEGORIA_N4 VARCHAR2(50),
NOME_CATEGORIA_N4 VARCHAR2(200),
CODIGO_CATEGORIA_N5 VARCHAR2(50),
NOME_CATEGORIA_N5 VARCHAR2(200),
CODIGO_PRODUTO VARCHAR2(50),
NOME_PRODUTO VARCHAR2(400),
DATA_PERDA DATE NOT NULL,
ANO NUMBER(4) NOT NULL,
MES NUMBER(2) NOT NULL,
DIA NUMBER(2) NOT NULL,
DIA_SEMANA NUMBER(1),
VALOR_PERDA NUMBER(18,4),
CUSTO NUMBER(18,4),
QTD_PERDA NUMBER(10),
DATAINC DATE DEFAULT SYSDATE NOT NULL,
DATAALT DATE DEFAULT SYSDATE NOT NULL
)';
END IF;
END;
-- +goose Down
DECLARE
v_count NUMBER;
BEGIN
SELECT COUNT(*) INTO v_count
FROM USER_TABLES
WHERE TABLE_NAME = 'TB_FLASH_PERDAS';
IF v_count > 0 THEN
EXECUTE IMMEDIATE 'DROP TABLE TB_FLASH_PERDAS CASCADE CONSTRAINTS PURGE';
END IF;
END;
@@ -0,0 +1,32 @@
-- +goose Up
DECLARE
v_count NUMBER;
BEGIN
SELECT COUNT(*) INTO v_count
FROM USER_TRIGGERS
WHERE TRIGGER_NAME = 'TRG_FLASH_PERDAS_BI';
IF v_count = 0 THEN
EXECUTE IMMEDIATE 'CREATE OR REPLACE TRIGGER TRG_FLASH_PERDAS_BI
BEFORE INSERT ON TB_FLASH_PERDAS
FOR EACH ROW
BEGIN
IF :NEW.ID IS NULL THEN
:NEW.ID := SEQ_FLASH_PERDAS.NEXTVAL;
END IF;
END;';
END IF;
END;
-- +goose Down
DECLARE
v_count NUMBER;
BEGIN
SELECT COUNT(*) INTO v_count
FROM USER_TRIGGERS
WHERE TRIGGER_NAME = 'TRG_FLASH_PERDAS_BI';
IF v_count > 0 THEN
EXECUTE IMMEDIATE 'DROP TRIGGER TRG_FLASH_PERDAS_BI';
END IF;
END;
@@ -0,0 +1,28 @@
-- +goose Up
DECLARE
v_count NUMBER;
BEGIN
SELECT COUNT(*) INTO v_count
FROM USER_INDEXES
WHERE INDEX_NAME = 'IDX_FLASH_PERDAS_01';
IF v_count = 0 THEN
EXECUTE IMMEDIATE 'CREATE INDEX IDX_FLASH_PERDAS_01
ON TB_FLASH_PERDAS (NUMERO_LOJA, DATA_PERDA)';
END IF;
END;
/
-- +goose Down
DECLARE
v_count NUMBER;
BEGIN
SELECT COUNT(*) INTO v_count
FROM USER_INDEXES
WHERE INDEX_NAME = 'IDX_FLASH_PERDAS_01';
IF v_count > 0 THEN
EXECUTE IMMEDIATE 'DROP INDEX IDX_FLASH_PERDAS_01';
END IF;
END;
/
@@ -0,0 +1,25 @@
-- +goose Up
BEGIN
EXECUTE IMMEDIATE 'COMMENT ON TABLE TB_FLASH_PERDAS IS ''Flash de perdas por loja, produto e data''';
EXECUTE IMMEDIATE 'COMMENT ON COLUMN TB_FLASH_PERDAS.ID IS ''Chave primária surrogate — populada via SEQ_FLASH_PERDAS''';
EXECUTE IMMEDIATE 'COMMENT ON COLUMN TB_FLASH_PERDAS.NUMERO_LOJA IS ''Código numérico da loja''';
EXECUTE IMMEDIATE 'COMMENT ON COLUMN TB_FLASH_PERDAS.DATA_PERDA IS ''Data do registro de perda''';
EXECUTE IMMEDIATE 'COMMENT ON COLUMN TB_FLASH_PERDAS.VALOR_PERDA IS ''Valor monetário da perda (4 casas decimais)''';
EXECUTE IMMEDIATE 'COMMENT ON COLUMN TB_FLASH_PERDAS.QTD_PERDA IS ''Quantidade perdida (inteiro)''';
EXECUTE IMMEDIATE 'COMMENT ON COLUMN TB_FLASH_PERDAS.CUSTO IS ''Custo unitário do produto no momento da perda''';
EXECUTE IMMEDIATE 'COMMENT ON COLUMN TB_FLASH_PERDAS.DATAINC IS ''Data/hora de inclusão do registro''';
EXECUTE IMMEDIATE 'COMMENT ON COLUMN TB_FLASH_PERDAS.DATAALT IS ''Data/hora da última alteração do registro''';
END;
-- +goose Down
BEGIN
EXECUTE IMMEDIATE 'COMMENT ON TABLE TB_FLASH_PERDAS IS ''''';
EXECUTE IMMEDIATE 'COMMENT ON COLUMN TB_FLASH_PERDAS.ID IS ''''';
EXECUTE IMMEDIATE 'COMMENT ON COLUMN TB_FLASH_PERDAS.NUMERO_LOJA IS ''''';
EXECUTE IMMEDIATE 'COMMENT ON COLUMN TB_FLASH_PERDAS.DATA_PERDA IS ''''';
EXECUTE IMMEDIATE 'COMMENT ON COLUMN TB_FLASH_PERDAS.VALOR_PERDA IS ''''';
EXECUTE IMMEDIATE 'COMMENT ON COLUMN TB_FLASH_PERDAS.QTD_PERDA IS ''''';
EXECUTE IMMEDIATE 'COMMENT ON COLUMN TB_FLASH_PERDAS.CUSTO IS ''''';
EXECUTE IMMEDIATE 'COMMENT ON COLUMN TB_FLASH_PERDAS.DATAINC IS ''''';
EXECUTE IMMEDIATE 'COMMENT ON COLUMN TB_FLASH_PERDAS.DATAALT IS ''''';
END;
@@ -0,0 +1,300 @@
-- +goose Up
-- +goose StatementBegin
CREATE OR REPLACE PROCEDURE PRC_CARREGA_FLASH_PERDAS (
p_data_inicial IN DATE,
p_data_final IN DATE,
p_reprocessar IN VARCHAR2 DEFAULT 'S'
)
IS
BEGIN
IF p_reprocessar = 'S' THEN
DELETE FROM TB_FLASH_PERDAS
WHERE DATA_PERDA BETWEEN p_data_inicial AND p_data_final;
END IF;
INSERT INTO TB_FLASH_PERDAS (
ID,
NUMERO_LOJA,
NOME_LOJA,
CODIGO_CATEGORIA_N1,
NOME_CATEGORIA_N1,
CODIGO_CATEGORIA_N2,
NOME_CATEGORIA_N2,
CODIGO_CATEGORIA_N3,
NOME_CATEGORIA_N3,
CODIGO_CATEGORIA_N4,
NOME_CATEGORIA_N4,
CODIGO_CATEGORIA_N5,
NOME_CATEGORIA_N5,
CODIGO_PRODUTO,
NOME_PRODUTO,
DATA_PERDA,
ANO,
MES,
DIA,
DIA_SEMANA,
VALOR_PERDA,
CUSTO,
QTD_PERDA,
DATAINC,
DATAALT
)
WITH cat_base AS (
SELECT
pc.seqproduto,
MAX(CASE WHEN cc.nivelhierarquia = 1 THEN dc.seqcategoria END) AS codcatn1,
MAX(CASE WHEN cc.nivelhierarquia = 1 THEN cc.categoria END) AS nomecatn1,
MAX(CASE WHEN cc.nivelhierarquia = 2 THEN dc.seqcategoria END) AS codcatn2,
MAX(CASE WHEN cc.nivelhierarquia = 2 THEN cc.categoria END) AS nomecatn2,
MAX(CASE WHEN cc.nivelhierarquia = 3 THEN dc.seqcategoria END) AS codcatn3,
MAX(CASE WHEN cc.nivelhierarquia = 3 THEN cc.categoria END) AS nomecatn3,
MAX(CASE WHEN cc.nivelhierarquia = 4 THEN dc.seqcategoria END) AS codcatn4,
MAX(CASE WHEN cc.nivelhierarquia = 4 THEN cc.categoria END) AS nomecatn4,
MAX(CASE WHEN cc.nivelhierarquia = 5 THEN dc.seqcategoria END) AS codcatn5,
MAX(CASE WHEN cc.nivelhierarquia = 5 THEN cc.categoria END) AS nomecatn5
FROM consinco.map_produto pc
JOIN consinco.map_familia fc
ON fc.seqfamilia = pc.seqfamilia
JOIN consinco.map_famdivcateg dc
ON dc.seqfamilia = fc.seqfamilia
AND dc.nrodivisao = 1
AND dc.status = 'A'
JOIN consinco.map_categoria cc
ON cc.nrodivisao = dc.nrodivisao
AND cc.seqcategoria = dc.seqcategoria
AND cc.tipcategoria = 'M'
AND cc.statuscategor = 'A'
AND cc.nivelhierarquia BETWEEN 1 AND 5
GROUP BY pc.seqproduto
),
custo_base AS (
SELECT
cd.seqproduto,
cd.nroempresa,
cd.dtaentradasaida,
(cd.cmdiavlrnf
+ cd.cmdiaipi
+ cd.cmdiaicmsst
+ cd.cmdiadespnf
+ cd.cmdiadespforanf
- cd.cmdiacredicms
- cd.cmdiacredicmspresum
- cd.cmdiacredicmsantecip
- cd.cmdiacredpis
- cd.cmdiacredcofins
- cd.cmdiadctoforanf) AS custo_dia
FROM consinco.mrl_custodia cd
),
inner_query AS (
SELECT
e.nroempresa AS empresa,
e.nomereduzido AS nomeempresa,
cat.codcatn1,
cat.nomecatn1,
cat.codcatn2,
cat.nomecatn2,
cat.codcatn3,
cat.nomecatn3,
cat.codcatn4,
cat.nomecatn4,
cat.codcatn5,
cat.nomecatn5,
c.seqproduto AS cod_produto,
a.desccompleta AS descricao,
a.seqprodutobase,
vw.dtaentradasaida AS data_venda,
SUM(vw.vlrctoliquido) AS custo_liq_na_loja,
SUM(vw.valorlancto) AS perda,
SUM(vw.qtdlancto) AS qtde_perda_unit,
(
SUM((vw.qtdlancto / c3.qtdembalagem) * c3.precovalidnormal *
(e.pericmsestimativa + e.peroutroimposto + e.percpmf + e.perir +
DECODE(e.indfaturaiss, 'S', e.perciss, 0) +
DECODE(e.indfaturaipi || b.indcalcipisaida, 'SS', b.peraliquotaipi, 0)) / 100)
+ SUM((vw.qtdlancto / c3.qtdembalagem) * c3.precovalidnormal *
(t3.peraliquota * t3.pertributado / 100) / 100)
+ SUM((vw.qtdlancto / c3.qtdembalagem) * c3.precovalidnormal *
DECODE(b.indisentopis, 'S', 0,
DECODE(b.indisentodebpiscofins, 'S', 0, e.perpis)) / 100)
+ SUM((vw.qtdlancto / c3.qtdembalagem) * c3.precovalidnormal *
DECODE(b.indisentopis, 'S', 0,
DECODE(b.indisentodebpiscofins, 'S', 0, e.percofins)) / 100)
) AS vlrimpostovda,
CASE
WHEN cat.codcatn2 IN (15458, 18080)
AND cat.codcatn3 NOT IN (17696, 18007, 17182)
THEN
SUM(
vw.qtdlancto * (
SELECT cx.custo_dia
FROM custo_base cx
WHERE cx.seqproduto = COALESCE(a.seqprodutobase, c.seqproduto)
AND cx.nroempresa = 301
AND cx.dtaentradasaida = (
SELECT MAX(cx2.dtaentradasaida)
FROM custo_base cx2
WHERE cx2.seqproduto = cx.seqproduto
AND cx2.nroempresa = 301
AND cx2.dtaentradasaida <= vw.dtaentradasaida
)
)
)
ELSE SUM(vw.valorlancto)
END AS perda_novo
FROM
maxv_categoria gs,
map_famdivcateg us,
map_famdivcateg w,
map_famdivisao d,
max_empresa e,
max_divisao i2,
map_classifabc z2,
maxv_abcperdabase vw,
map_tributacaouf t3,
map_familia b,
mad_famsegmento h,
map_famembalagem k,
mrl_produtoempresa c,
mrl_prodempseg c3,
map_produto a,
mad_segmento se,
map_produto pr,
cat_base cat,
(
SELECT
a.seqproduto,
a.nroempresa,
SUM(a.estqloja) AS estqloja,
SUM(a.estqdeposito) AS estqdeposito,
SUM(a.estqtroca) AS estqtroca,
SUM(a.estqalmoxarifado) AS estqalmoxarifado,
SUM(a.estqoutro) AS estqoutro,
SUM(
NVL(a.cmultvlrdescpistransf, 0) +
NVL(a.cmultvlrdesccofinstransf, 0) +
NVL(a.cmultvlrdescicmstransf, 0) +
NVL(a.cmultvlrdescipitransf, 0) +
NVL(a.cmultvlrdesclucrotransf, 0) +
NVL(a.cmultvlrdescverbatransf, 0) +
NVL(a.cmultvlrdescdiferencatransf, 0)
) AS vlrdesctransfcb
FROM mrl_produtoempresa a
GROUP BY a.seqproduto, a.nroempresa
) sx,
(
SELECT MAX(dx.utilacresccustprodrelac) AS utilacresccustprodrelac
FROM max_divisao dx
JOIN max_empresa ex
ON ex.nrodivisao = dx.nrodivisao
) i3
WHERE
e.nroempresa = vw.nroempresa
AND e.nrodivisao = d.nrodivisao
AND h.seqfamilia = vw.seqfamilia
AND h.nrosegmento = e.nrosegmentoprinc
AND h.nrosegmento = se.nrosegmento
AND d.seqfamilia = vw.seqfamilia
AND d.nrodivisao IN (1)
AND b.seqfamilia = vw.seqfamilia
AND i2.nrodivisao = d.nrodivisao
AND z2.nrosegmento = h.nrosegmento
AND z2.classifcomercabc = h.classifcomercabc
AND k.seqfamilia = h.seqfamilia
AND a.seqproduto = c.seqproduto
AND k.qtdembalagem = h.padraoembvenda
AND c.seqproduto = vw.seqproduto
AND c.nroempresa = NVL(e.nroempcustoabc, e.nroempresa)
AND c3.nroempresa = vw.nroempresa
AND c3.seqproduto = vw.seqproduto
AND c3.nrosegmento = e.nrosegmentoprinc
AND c3.qtdembalagem = h.padraoembvenda
AND t3.nrotributacao = d.nrotributacao
AND t3.ufempresa = e.uf
AND t3.ufclientefornec = e.uf
AND t3.tiptributacao = DECODE(i2.tipdivisao, 'V', 'SN', 'SC')
AND t3.nroregtributacao = NVL(e.nroregtributacao, 0)
AND pr.seqproduto = vw.seqproduto
AND sx.seqproduto = vw.seqproduto
AND sx.nroempresa = vw.nroempresa
AND cat.seqproduto = vw.seqproduto
AND vw.dtaentradasaida BETWEEN p_data_inicial AND p_data_final
AND vw.nroempresa IN (
SELECT CODIGO
FROM VITRUVIO.vi_lojas
WHERE codigo NOT IN (301, 401, 500)
)
AND vw.tipclassinterno IN ('P', 'R', 'C', 'A')
AND vw.tiplancto IN ('S')
AND gs.nrodivisao = us.nrodivisao
AND gs.nivelhierarquia = 2
AND gs.tipcategoria = 'M'
AND gs.statuscategor != 'I'
AND us.seqfamilia = d.seqfamilia
AND us.nrodivisao = d.nrodivisao
AND us.seqcategoria = gs.seqcategoria
AND us.status = 'A'
AND w.seqfamilia = d.seqfamilia
AND w.nrodivisao = d.nrodivisao
AND w.status = 'A'
AND w.seqcategoria IN (14772, 15450)
GROUP BY
e.nroempresa,
e.nomereduzido,
gs.seqcategoria,
gs.caminhocompleto,
SUBSTR(e.nomereduzido || ' : ' || gs.caminhocompleto, 1, 250),
c.seqproduto,
a.seqprodutobase,
a.desccompleta,
vw.dtaentradasaida,
cat.codcatn1, cat.nomecatn1,
cat.codcatn2, cat.nomecatn2,
cat.codcatn3, cat.nomecatn3,
cat.codcatn4, cat.nomecatn4,
cat.codcatn5, cat.nomecatn5,
TO_NUMBER(NULL),
NULL
)
SELECT
SEQ_FLASH_PERDAS.NEXTVAL,
iq.empresa,
iq.nomeempresa,
TO_CHAR(iq.codcatn1),
iq.nomecatn1,
TO_CHAR(iq.codcatn2),
iq.nomecatn2,
TO_CHAR(iq.codcatn3),
iq.nomecatn3,
TO_CHAR(iq.codcatn4),
iq.nomecatn4,
TO_CHAR(iq.codcatn5),
iq.nomecatn5,
TO_CHAR(iq.cod_produto),
iq.descricao,
iq.data_venda,
EXTRACT(YEAR FROM iq.data_venda),
EXTRACT(MONTH FROM iq.data_venda),
EXTRACT(DAY FROM iq.data_venda),
(TRUNC(iq.data_venda) - TRUNC(iq.data_venda, 'IW') + 1),
iq.perda_novo,
iq.custo_liq_na_loja,
iq.qtde_perda_unit,
SYSDATE,
SYSDATE
FROM inner_query iq;
COMMIT;
END;
-- +goose StatementEnd
-- +goose Down
-- +goose StatementBegin
BEGIN
EXECUTE IMMEDIATE 'DROP PROCEDURE PRC_CARREGA_FLASH_PERDAS';
EXCEPTION
WHEN OTHERS THEN
IF SQLCODE != -4043 THEN
RAISE;
END IF;
END;
-- +goose StatementEnd
@@ -0,0 +1,26 @@
-- +goose Up
DECLARE
v_count NUMBER;
BEGIN
SELECT COUNT(*) INTO v_count
FROM USER_SEQUENCES
WHERE SEQUENCE_NAME = 'SEQ_FLASH_VENDAS';
IF v_count = 0 THEN
EXECUTE IMMEDIATE 'CREATE SEQUENCE SEQ_FLASH_VENDAS
START WITH 1 INCREMENT BY 1 NOCACHE NOCYCLE';
END IF;
END;
-- +goose Down
DECLARE
v_count NUMBER;
BEGIN
SELECT COUNT(*) INTO v_count
FROM USER_TRIGGERS
WHERE TRIGGER_NAME = 'TRG_FLASH_VENDAS_BI';
IF v_count > 0 THEN
EXECUTE IMMEDIATE 'DROP TRIGGER TRG_FLASH_VENDAS_BI';
END IF;
END;
@@ -0,0 +1,26 @@
-- +goose Up
DECLARE
v_count NUMBER;
BEGIN
SELECT COUNT(*) INTO v_count
FROM USER_INDEXES
WHERE INDEX_NAME = 'IDX_FLASH_VENDAS_01';
IF v_count = 0 THEN
EXECUTE IMMEDIATE 'CREATE INDEX IDX_FLASH_VENDAS_01
ON TB_FLASH_VENDAS (NUMERO_LOJA, DATA_VENDA)';
END IF;
END;
-- +goose Down
DECLARE
v_count NUMBER;
BEGIN
SELECT COUNT(*) INTO v_count
FROM USER_INDEXES
WHERE INDEX_NAME = 'IDX_FLASH_VENDAS_01';
IF v_count > 0 THEN
EXECUTE IMMEDIATE 'DROP INDEX IDX_FLASH_VENDAS_01';
END IF;
END;
@@ -0,0 +1,52 @@
-- +goose Up
DECLARE
v_count NUMBER;
BEGIN
SELECT COUNT(*) INTO v_count
FROM USER_TABLES
WHERE TABLE_NAME = 'TB_FLASH_VENDAS';
IF v_count = 0 THEN
EXECUTE IMMEDIATE 'CREATE TABLE TB_FLASH_VENDAS (
ID NUMBER NOT NULL
CONSTRAINT PK_FLASH_VENDAS PRIMARY KEY,
NUMERO_LOJA NUMBER(10) NOT NULL,
NOME_LOJA VARCHAR2(200) NOT NULL,
CODIGO_CATEGORIA_N1 VARCHAR2(50),
NOME_CATEGORIA_N1 VARCHAR2(200),
CODIGO_CATEGORIA_N2 VARCHAR2(50),
NOME_CATEGORIA_N2 VARCHAR2(200),
CODIGO_CATEGORIA_N3 VARCHAR2(50),
NOME_CATEGORIA_N3 VARCHAR2(200),
CODIGO_CATEGORIA_N4 VARCHAR2(50),
NOME_CATEGORIA_N4 VARCHAR2(200),
CODIGO_CATEGORIA_N5 VARCHAR2(50),
NOME_CATEGORIA_N5 VARCHAR2(200),
CODIGO_PRODUTO VARCHAR2(50),
NOME_PRODUTO VARCHAR2(400),
DATA_VENDA DATE NOT NULL,
ANO NUMBER(4) NOT NULL,
MES NUMBER(2) NOT NULL,
DIA NUMBER(2) NOT NULL,
DIA_SEMANA NUMBER(1),
VALOR_VENDA NUMBER(18,4),
CUSTO NUMBER(18,4),
QTD_VENDA NUMBER(10),
DATAINC DATE DEFAULT SYSDATE NOT NULL,
DATAALT DATE DEFAULT SYSDATE NOT NULL
)';
END IF;
END;
-- +goose Down
DECLARE
v_count NUMBER;
BEGIN
SELECT COUNT(*) INTO v_count
FROM USER_TABLES
WHERE TABLE_NAME = 'TB_FLASH_VENDAS';
IF v_count > 0 THEN
EXECUTE IMMEDIATE 'DROP TABLE TB_FLASH_VENDAS CASCADE CONSTRAINTS PURGE';
END IF;
END;
@@ -0,0 +1,32 @@
-- +goose Up
DECLARE
v_count NUMBER;
BEGIN
SELECT COUNT(*) INTO v_count
FROM USER_TRIGGERS
WHERE TRIGGER_NAME = 'TRG_FLASH_VENDAS_BI';
IF v_count = 0 THEN
EXECUTE IMMEDIATE 'CREATE OR REPLACE TRIGGER TRG_FLASH_VENDAS_BI
BEFORE INSERT ON TB_FLASH_VENDAS
FOR EACH ROW
BEGIN
IF :NEW.ID IS NULL THEN
:NEW.ID := SEQ_FLASH_VENDAS.NEXTVAL;
END IF;
END;';
END IF;
END;
-- +goose Down
DECLARE
v_count NUMBER;
BEGIN
SELECT COUNT(*) INTO v_count
FROM USER_TRIGGERS
WHERE TRIGGER_NAME = 'TRG_FLASH_VENDAS_BI';
IF v_count > 0 THEN
EXECUTE IMMEDIATE 'DROP TRIGGER TRG_FLASH_VENDAS_BI';
END IF;
END;
@@ -0,0 +1,16 @@
-- +goose Up
DECLARE
v_count NUMBER;
BEGIN
SELECT COUNT(*) INTO v_count
FROM USER_INDEXES
WHERE INDEX_NAME = 'IDX_FLASH_VENDAS_01';
IF v_count = 0 THEN
EXECUTE IMMEDIATE 'CREATE INDEX IDX_FLASH_VENDAS_01
ON TB_FLASH_VENDAS (NUMERO_LOJA, DATA_VENDA)';
END IF;
END;
-- +goose Down
SELECT 'down SQL query';
@@ -0,0 +1,15 @@
-- +goose Up
BEGIN
EXECUTE IMMEDIATE 'COMMENT ON TABLE TB_FLASH_VENDAS IS ''Flash de vendas por loja, produto e data''';
EXECUTE IMMEDIATE 'COMMENT ON COLUMN TB_FLASH_VENDAS.ID IS ''Chave primária surrogate — populada via SEQ_FLASH_VENDAS''';
EXECUTE IMMEDIATE 'COMMENT ON COLUMN TB_FLASH_VENDAS.NUMERO_LOJA IS ''Código numérico da loja''';
EXECUTE IMMEDIATE 'COMMENT ON COLUMN TB_FLASH_VENDAS.DATA_VENDA IS ''Data do registro de venda''';
EXECUTE IMMEDIATE 'COMMENT ON COLUMN TB_FLASH_VENDAS.VALOR_VENDA IS ''Valor monetário da venda (4 casas decimais)''';
EXECUTE IMMEDIATE 'COMMENT ON COLUMN TB_FLASH_VENDAS.QTD_VENDA IS ''Quantidade vendida (inteiro)''';
EXECUTE IMMEDIATE 'COMMENT ON COLUMN TB_FLASH_VENDAS.CUSTO IS ''Custo unitário do produto no momento da venda''';
EXECUTE IMMEDIATE 'COMMENT ON COLUMN TB_FLASH_VENDAS.DATAINC IS ''Data/hora de inclusão do registro''';
EXECUTE IMMEDIATE 'COMMENT ON COLUMN TB_FLASH_VENDAS.DATAALT IS ''Data/hora da última alteração do registro''';
END;
-- +goose Down
SELECT 'down SQL query';