Lógica Complexa em triggers refere-se à implementação de processos mais sofisticados e detalhados dentro de um trigger SQL. Esses processos podem incluir múltiplas condições, loops, cálculos, ou a combinação de várias ações em resposta a um evento de banco de dados, como INSERT
, UPDATE
, ou DELETE
.
Implementar lógica complexa em triggers permite que você controle e manipule os dados de forma automatizada, garantindo que certas regras de negócios sejam aplicadas diretamente no nível do banco de dados, sem depender da lógica da aplicação.
Suponha que temos um sistema de gerenciamento de estoque com três tabelas: Produtos
, Estoque
, e Logs_Estoque
. Queremos garantir que, quando um produto for vendido (registrado na tabela Vendas
), o estoque seja atualizado e uma entrada seja registrada na tabela de logs.
Cenário:
Vendas
registra cada venda.Estoque
precisa ser atualizada para refletir a quantidade restante após a venda.Logs_Estoque
deve registrar cada mudança no estoque para fins de auditoria.CREATE TRIGGER atualizar_estoque_e_log
AFTER INSERT ON Vendas
FOR EACH ROW
BEGIN
-- Atualizar o estoque
UPDATE Estoque
SET quantidade = quantidade - NEW.quantidade_vendida
WHERE id_produto = NEW.id_produto;
-- Verificar se o estoque caiu abaixo de um limite crítico
IF (SELECT quantidade FROM Estoque WHERE id_produto = NEW.id_produto) < 10 THEN
-- Enviar notificação (simplificado para fins de exemplo)
INSERT INTO Notificacoes (mensagem, data_hora)
VALUES ('Estoque baixo para o produto ' || NEW.id_produto, NOW());
END IF;
-- Registrar a mudança no log de estoque
INSERT INTO Logs_Estoque (id_produto, quantidade_antes, quantidade_depois, data_modificacao)
VALUES (
NEW.id_produto,
OLD.quantidade,
(SELECT quantidade FROM Estoque WHERE id_produto = NEW.id_produto),
NOW()
);
END;
Explicação:
atualizar_estoque_e_log
é disparado após uma nova venda ser inserida na tabela Vendas
.Logs_Estoque
, capturando a quantidade antes e depois da venda.Em um sistema bancário, é comum precisar validar várias condições antes de permitir uma transação, como garantir que a conta tenha saldo suficiente e registrar a transação em uma tabela de auditoria. Se uma condição falhar, a transação deve ser abortada.
Cenário:
Transacoes
registra cada transação financeira.Contas
armazena o saldo de cada conta.