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.

Exemplos de Lógica Complexa em Triggers

1. Atualização de Múltiplas Tabelas com Condições

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:

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:

2. Controle de Transações com Condições e Exceções

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: