CodeGym /Cursos /SQL SELF /Criando triggers e procedures

Criando triggers e procedures

SQL SELF
Nível 61 , Lição 3
Disponível

Criando triggers e procedures

Mandou bem nos exercícios anteriores? Então bora pra um desafio mais cabuloso. Agora é hora de fixar o que você já aprendeu de PL-SQL e botar a mão na massa com procedures e triggers. Preparado?

Criando procedures

Aqui embaixo tem umas procedures que vale a pena adicionar no banco de dados do seu marketplace. Cada uma vem com uma explicação de qual problema ou processo de negócio ela resolve e por que é importante implementar. Essas procedures cobrem automação de operações chave, melhoram a experiência do usuário, otimizam a vitrine, logística, suporte, marketing e analytics.

1. Criação de pedido com reserva automática de produtos

Fazer pedido é a operação principal de qualquer marketplace. A procedure não só cria o registro do pedido e dos itens, mas também reserva o produto no estoque, baixa a quantidade, marca o status, inicia o pagamento e dispara os próximos processos (notificações, logística). Automatizar esse fluxo reduz erro humano, evita over-selling e garante estoque atualizado em tempo real.

2. Automação da reposição de estoque

Pra não ficar sem estoque e perder venda, é essencial repor os produtos quando o nível cai abaixo do mínimo. Essa procedure checa o estoque de todos os produtos, compara com o mínimo e automaticamente gera pedidos de compra ou ressuprimento interno. Automatizar isso agiliza a resposta e tira trabalho manual do time operacional.

3. Atualização em massa de status de pedidos e notificação de clientes

No catálogo, muitas vezes é preciso mudar o status de vários pedidos de uma vez (tipo, “paid” → “shipped” ou “shipped” → “completed”) conforme o andamento. A procedure atualiza o status de todos os pedidos que se encaixam, grava o histórico das mudanças (pra auditoria) e pode disparar notificações pros clientes. Isso automatiza o back-office e reduz erro manual.

4. Aplicação em massa de descontos/cupom em produtos

Pra promover produtos ou fazer campanhas, às vezes precisa aplicar cupom ou desconto em toda uma categoria, marca ou seleção de produtos. A procedure coloca os descontos, respeita restrições (data, limites), atualiza o contador de usos e evita duplicidade.

5. Reembolso automático pro usuário

Processar devoluções e reembolsos é fundamental pra confiança do cliente. A procedure checa o status do pedido, valida o reembolso, inicia o estorno do pagamento, atualiza status, faz o log da transação e avisa o usuário. Fazer tudo numa transação só reduz risco de erro e fraude.

6. Recalcular média de avaliação do produto/vendedor

Cada vez que rola um novo review, alteração ou exclusão, a média de avaliação do produto ou usuário tem que estar atualizada. A procedure recalcula e atualiza o campo “avg_rating”/“review_count” rapidinho, pra agilizar as consultas do front e garantir analytics certinho.

7. Desativação automática de produtos com estoque zerado

Pra vitrine funcionar direito e evitar experiência ruim pro usuário, produtos sem estoque precisam ser automaticamente ocultados (desativados). A procedure checa o estoque e status dos produtos regularmente, muda o status pra “inactive”, faz o log da mudança e mantém o catálogo atualizado sem precisar de conferência manual.

8. Atribuição automática de pedido pro entregador e atualização do status de entrega

Na logística, é importante designar rápido e de forma transparente o entregador pro pedido, mudar o status da entrega e registrar tudo pra rastreamento. A procedure automatiza esses passos e tira trabalho manual do gerente.

9. Envio em massa de notificações pros usuários (trigger de promo, lembrete)

Notificações de promoções, devoluções, mudança de status ou ações de marketing precisam ser enviadas em massa, considerando condições (usuários ativos, quem não compra faz tempo, abandonou o carrinho etc). A procedure dispara push/email pra um segmento definido.

10. Arquivamento de dados antigos (tipo pedidos finalizados ou produtos inativos)

Pra manter o banco rápido e diminuir o tamanho das tabelas “quentes”, registros antigos (pedidos velhos, produtos arquivados, tickets de suporte antigos) precisam ser movidos ou marcados como “arquivo” de tempos em tempos. A procedure facilita a exclusão ou movimentação dos dados e reduz trabalho manual dos admins.

Criando triggers

1. Logging de mudança de status do pedido

Ter o histórico completo das mudanças de status dos pedidos é essencial pra auditoria, suporte, analytics e envio automático de notificações pro usuário sobre o andamento do pedido. O trigger cria um registro em "order".order_status_log toda vez que o status do pedido muda, sem precisar que o dev faça isso manualmente no app.

2. Registro automático do histórico de preço do SKU

O histórico de preço do SKU é importante pra analytics, mostrar “preço antigo”, rastrear promoções e avisar automaticamente sobre descontos. O trigger grava cada mudança no campo price da tabela product.variant no histórico product.price_history. Assim, você tem toda a evolução dos preços sem erro ou esquecimento.

3. Sincronização do estoque ao alterar produtos no estoque

Cada alteração no estoque (tipo contagem, entrada, saída) precisa atualizar automaticamente o campo last_updated pra analytics e controle de dados atualizados. Esse trigger também pode disparar uma checagem automática do estoque mínimo e iniciar um auto-pedido.

4. Desativação automática de variantes de produto com estoque zerado

Pra evitar que o cliente compre produto que não tem, quando o estoque de todas as variantes chega a zero, o campo is_active vira FALSE automaticamente. Isso reduz review negativo e cancelamento de pedido.

5. Logging de tentativas de login do admin (segurança)

Controlar login de admin é chave pra segurança da informação. Todas as tentativas de login (sucesso e falha) são registradas automaticamente em admin.login_attempt via trigger BEFORE INSERT. Assim dá pra detectar ataque, invasão ou atividade suspeita rapidinho.

6. Logging de mudanças importantes no produto e histórico automático

Toda alteração importante no produto (status, descrição, nome) precisa ser registrada pra auditoria, recuperação de erro e controle de abuso. O trigger cria um registro em product.status_history quando o status muda e pode ser expandido pra outros campos importantes.

7. Atualização automática do contador de uso do cupom

Controlar direitinho o número de usos do cupom é importante pra limitar promoções e evitar abuso. O trigger, a cada insert em marketing.promo_usage, aumenta o campo used_count na tabela marketing.promo_code, evitando inconsistência nos dados.

8. Atualização do saldo da carteira do usuário em transações

Pra mostrar o saldo certo da carteira de bônus/cashback do usuário, cada transação precisa atualizar automaticamente o saldo final na tabela payment.wallet. O trigger ao inserir uma nova transação diminui o risco de perda ou erro de dados por falha do app.

9. Definição automática de endereço, email ou telefone “principal”

Pra evitar que o usuário fique sem email/telefone/endereço principal (o que é crítico pra recuperar acesso e comunicação), o trigger marca is_primary=TRUE no primeiro registro se não tiver nenhum, e garante que só tenha um principal por usuário.

10. Cálculo do rating médio do produto ao adicionar review

Pra mostrar rapidinho o “rating médio” na página do produto e na busca, atualizar esse valor a cada novo review é mais eficiente do que recalcular tudo via query toda hora. O trigger mantém o cache do campo avg_rating e/ou review_count na tabela product.product.

11. Definição automática da data de publicação do conteúdo

Pra artigos, páginas ou outras publicações, ao mudar o status pra “published” é importante preencher certinho o campo published_at. Isso garante integridade no CMS: usuários e admins veem a data certa da publicação e o front não precisa de atualização manual extra.

12. Logging de todos os eventos do suporte (mudança de status do ticket)

Ter o histórico completo dos chamados de suporte e das mudanças de status ajuda a avaliar o suporte, fazer analytics e dar transparência pro usuário. O trigger grava automaticamente em support.ticket_status_log quando o status do ticket muda.

Observação

Adicionar esses triggers aumenta muito a confiabilidade, transparência e automação dos processos chave do marketplace, tira peso do código do app e garante integridade dos dados direto no banco. Eles seguem as melhores práticas de design de sistemas relacionais pra e-commerce grande.

Comentários
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION