Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save reinaldocoelho/26eeec642abfcf2fca1072a43f916a62 to your computer and use it in GitHub Desktop.
Save reinaldocoelho/26eeec642abfcf2fca1072a43f916a62 to your computer and use it in GitHub Desktop.
Exemplo de Trigger com MariaDB
-- EXEMPLO:
-- 1. CRIA TABELA PARA REGISTRAR LOGS
CREATE OR REPLACE TABLE TriggerLog(text varchar(200)) ENGINE=MyIsam;
-- 2. CRIA TABELA DE REGISTROS
CREATE OR REPLACE TABLE registros (
id int(11) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
cliente int NOT NULL,
valor varchar(80) COLLATE utf8_unicode_ci NOT NULL,
dia date COLLATE utf8_unicode_ci NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
-- 3. CRIA TABELA DE DADOS
CREATE OR REPLACE TABLE dados (
id int(11) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
cliente int,
percentualdia varchar(80) COLLATE utf8_unicode_ci NOT NULL -- Alterei pra existir esse percentual dia invés dos calculos que vc tinha.
);
-- 4. CRIA TRIGGER (ESPECULADA)
-- Exemplo da Trigger de recalculo
CREATE OR REPLACE TRIGGER calculapercentual
AFTER INSERT ON registros
FOR EACH ROW
BEGIN
DECLARE percentualdianovo VARCHAR(70) DEFAULT '';
DECLARE CalculoX NUMERIC(10,2) DEFAULT 0;
DECLARE StringId varchar(10);
DECLARE IdAnterior INT;
DECLARE StrIdAnterior VARCHAR(10);
SET StringId = CAST(NEW.id AS CHAR CHARACTER SET utf8);
Insert into TriggerLog(text) values(CONCAT("[", StringId,"] Iniciando registro."));
SET IdAnterior = (SELECT MAX(id)-1 FROM registros WHERE cliente = NEW.cliente);
SET StrIdAnterior = CAST(IdAnterior AS CHAR CHARACTER SET utf8);
Insert into TriggerLog(text) values(CONCAT("[", StringId,"] ID ANTERIOR=",StrIdAnterior,"."));
SELECT valor INTO @percentualdiaant FROM registros WHERE id = IdAnterior;
Insert into TriggerLog(text) values(CONCAT("[", StringId,"] VALOR ENCONTRADO DIA ANTERIOR=",@percentualdiaant,"."));
SET percentualdianovo = NEW.valor;
Insert into TriggerLog(text) values(CONCAT("[", StringId,"] NOVO VALOR=",percentualdianovo,"."));
SET CalculoX = ((CAST(percentualdianovo as int)*100)/CAST(@percentualdiaant as int))-100;
Insert into TriggerLog(text) values(CONCAT("[", StringId,"] CALCULADO=",CalculoX,"."));
INSERT INTO dados (cliente, percentualdia)
values(NEW.cliente, CalculoX);
END;
-- 5. Insere registros de teste
select * from registros;
insert into registros(cliente, valor, dia) values(1, '50', '2022-03-01');
insert into registros(cliente, valor, dia) values(1, '60', '2022-03-02');
-- 6. Confere dado registrado
select * from dados;
-- truncate table dados;
-- 7. Confere dados do log
select * from TriggerLog;
-- truncate table TriggerLog;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment