Stored Procedures, Triggers e Funções: Guia Prático

Stored Procedures, Triggers e Funções: O Que São, Quando Usar e Quando Evitar

Compartilhe:

As Stored Procedures, Triggers e Funções são componentes essenciais em bancos de dados que permitem a automação e a manipulação de dados de forma eficiente. Elas podem simplificar tarefas complexas, aumentar a performance e manter a consistência nos sistemas. Neste artigo, exploraremos em detalhes o que são, como funcionam, quando usá-las e também os cenários em que não são ideais. Além disso, incluiremos exemplos práticos detalhados e hacks avançados para maximizar sua eficiência.


O Que São Stored Procedures, Triggers e Funções?

Stored Procedures

As Stored Procedures (Procedures Armazenadas) são blocos de código SQL armazenados no servidor de banco de dados. Elas são executadas como uma única unidade de trabalho e podem incluir lógicas complexas que combinam SQL procedural e declarativo.

Características Principais:

  • Podem receber parâmetros de entrada e saída.
  • São armazenadas no banco de dados e podem ser reutilizadas.
  • Reduzem o tráfego entre a aplicação e o banco de dados.
  • Permitem execução condicional e laços.

Exemplo Simples de Stored Procedure:

DELIMITER //
CREATE PROCEDURE GetCustomerByID (IN customer_id INT)
BEGIN
    SELECT * FROM customers WHERE id = customer_id;
END //
DELIMITER ;

Para executar:

CALL GetCustomerByID(1);

Triggers

Os Triggers (gatilhos) são blocos de código SQL que são automaticamente executados (ou disparados) em resposta a eventos em tabelas, como INSERT, UPDATE ou DELETE.

Características Principais:

  • São atrelados a eventos específicos.
  • Executam automaticamente, sem necessidade de chamada explícita.
  • Úteis para auditoria, validações e atualizações automáticas.

Exemplo Simples de Trigger:

CREATE TRIGGER after_insert_customer
AFTER INSERT ON customers
FOR EACH ROW
BEGIN
    INSERT INTO audit_log (action, table_name, action_time)
    VALUES ('INSERT', 'customers', NOW());
END;

Este trigger registra no log toda vez que um cliente é inserido.

Abre em nova aba


Funções

As Funções(Functions) são blocos de código que realizam uma tarefa específica e retornam um único valor. Elas podem ser usadas em SELECT,WHEREou outras partes de uma consulta.

Características Principais:

  • Sempre retornam um valor.
  • Podem ser chamadas diretamente em consultas.
  • Ideais para cálculos e formatações.

Exemplo Simples de Função:

DELIMITER //
CREATE FUNCTION GetCustomerFullName (customer_id INT)
RETURNS VARCHAR(255)
DETERMINISTIC
BEGIN
DECLARE full_name VARCHAR(255);SELECT CONCAT(first_name,' ',last_name) INTO full_name
FROM customers WHERE id=customer_id;RETURN full_name;END //
DELIMITER;

Para usar:

SELECT GetCustomerFullName(1);

Quando Usar Stored Procedures,Triggers e Funções?

Stored Procedures

Quando Usar:

  1. Operações Complexas:Quando você precisa realizar várias consultas ou combinações de lógica em um único bloco.
  2. Reuso de Código:Para centralizar lógicas que são utilizadas por diferentes aplicações.
  3. Redução de Tráfego:Minimiza a comunicação entre aplicação e banco,processando tudo no servidor.

Exemplo Prático:

Um sistema de faturamento pode usar uma procedure para calcular impostos:

DELIMITER //
CREATE PROCEDURE CalculateInvoice (IN invoice_id INT)
BEGIN
UPDATE invoices SET total=subtotal+(subtotal * tax_rate / 100)
WHERE id=invoice_id;END //
DELIMITER;

Uso:

CALL CalculateInvoice(1001);

Triggers

Quando Usar:

  1. Auditoria:Para rastrear mudanças em tabelas.
  2. Validações Automáticas:Para garantir consistência nos dados antes ou depois de um evento.
  3. Sincronização de Dados:Manter tabelas relacionadas atualizadas automaticamente.

Exemplo Prático:

Sincronizar estoque ao registrar uma venda:

CREATE TRIGGER update_inventory_after_sale
AFTER INSERT ON sales
FOR EACH ROW
BEGIN
UPDATE inventory
SET stock=stock-NEW.quantity
WHERE product_id=NEW.product_id;END;

Este trigger reduz automaticamente o estoque após uma venda ser registrada.


Funções

Quando Usar:

  1. Cálculos Repetitivos:Para encapsular lógica matemática ou de negócios.
  2. Formatação de Dados:Para padronizar saídas (e.g.,concatenar strings).
  3. Filtros em Consultas:Para simplificar condições complexas.

Exemplo Prático:

Uma função para calcular a idade:

DELIMITER //
CREATE FUNCTION CalculateAge (birth_date DATE)
RETURNS INT
DETERMINISTIC
BEGIN
RETURN TIMESTAMPDIFF(YEAR,birth_date,CURDATE());END //
DELIMITER;

Uso:

SELECT name,CalculateAge(birth_date) AS age FROM employees;

Quando Não Usar

Stored Procedures

  • Alta Frequência de Alterações:Procedures complicadas são difíceis de manter e testar.
  • Uso Excessivo:Lógica de negócios complexa deve ser preferencialmente mantida na aplicação.

Triggers

  • Debugging Difícil:Triggers executam automaticamente e podem ser difíceis de rastrear.
  • Impacto na Performance:Muitos triggers podem tornar inserções e atualizações mais lentas.

Funções

  • Cálculos Pesados em Grandes Conjuntos de Dados:Funções linha a linha podem ser lentas comparadas a operações nativas.

Hacks Avançados

1. Usar Triggers para Auditoria Completa

Crie uma tabela de log detalhada:

CREATE TABLE audit_log (id INT AUTO_INCREMENT PRIMARY KEY,action VARCHAR(50),table_name VARCHAR(50),action_time DATETIME,old_data JSON,new_data JSON);

E um trigger para preencher:

CREATE TRIGGER audit_before_update
BEFORE UPDATE ON employees
FOR EACH ROW
BEGIN
INSERT INTO audit_log (action,table_name,action_time,old_data,new_data)
VALUES ('UPDATE','employees',NOW(),JSON_OBJECT('id',OLD.id,'name',OLD.name),JSON_OBJECT('id',NEW.id,'name',NEW.name));END;

2. Combinar Funções e Views

Crie uma função e uma view para relatórios dinâmicos:

CREATE FUNCTION GetMonthlySales (month INT,year INT)
RETURNS DECIMAL(10,2)
DETERMINISTIC
BEGIN
RETURN (SELECT SUM(total) FROM sales
WHERE MONTH(sale_date)=month AND YEAR(sale_date)=year);END;
CREATE VIEW monthly_sales_report AS
SELECT
YEAR(sale_date) AS year,MONTH(sale_date) AS month,GetMonthlySales(MONTH(sale_date),YEAR(sale_date)) AS total_sales
FROM sales;

Uso:

SELECT * FROM monthly_sales_report;

3. Stored Procedures para ETL

Automatize tarefas de ETL (Extract,Transform,Load):

DELIMITER //
CREATE PROCEDURE LoadDataFromStaging()
BEGIN
INSERT INTO customers (id,name,email)
SELECT id,name,email FROM staging_customers;DELETE FROM staging_customers;END //
DELIMITER;

Conclusão

Stored Procedures,Triggers e Funções são ferramentas poderosas que,quando usadas corretamente,podem otimizar processos e manter a consistência no banco de dados. No entanto,é essencial entender seus impactos na performance e manutenção do sistema. Usando os exemplos e hacks avançados apresentados,você estará melhor equipado para decidir quando utilizá-los e como extrair o máximo potencial dessas funcionalidades.

Referências para Aprender Mais e Praticar

  1. Documentação Oficial do MySQL:https://dev.mysql.com/doc/
  2. Documentação do PostgreSQL sobre Triggers e Funções:https://www.postgresql.org/docs/current/
  3. Curso Gratuito de SQL da W3Schools:https://www.w3schools.com/sql/
  4. Ferramentas Práticas:
    • DB Fiddle:Teste consultas SQL online.
    • SQLZOO:Tutoriais e exercícios de SQL interativos.

Compartilhe:

Ramos Souza J
Ramos Souza Jhttps://ramosdainformatica.com.br/sobre/
Com mais de 26 anos de experiência em desenvolvimento de software, minha carreira é marcada por constante evolução tecnológica e pela entrega de soluções que fazem a diferença. Desde os primeiros passos com Clipper e Delphi até a consolidação em JavaScript e TypeScript, desenvolvi expertise em frameworks como Node.js, Nest e React, além de bancos de dados relacionais e não relacionais. Sou um Desenvolvedor Full Stack apaixonado por resolver problemas complexos com excelência técnica, adaptando-me rapidamente a novos desafios. Além do domínio técnico, sou reconhecido por meu relacionamento interpessoal e compromisso com resultados. Atualmente, trabalho em uma startup de Health-Tech e sou voluntário na OpenJS Foundation, promovendo o avanço do ecossistema JavaScript. Além de manter este site.

RECENTES

Claude Sonnet 4.5: Mais Avançado para Programação e Automação

A Anthropic acaba de lançar o Claude Sonnet 4.5,...

AP2 do Google: Desenvolva Pagamentos para agentes de IA

O Google lançou o Agent Payments Protocol (AP2), um...

Curso gratuito de GitHub Copilot para devs e estudantes

A Microsoft abriu as inscrições para o primeiro Bootcamp...

Santander e a Alura oferecem 60.000 bolsas em carreira de tecnologia

Quer dar um salto na sua carreira? O Santander Imersão Digital está...

Google Tradutor desafia o Duolingo com novas ferramentas de aprendizagem de idiomas

O Google está lançando um novo recurso experimental com...

A peça que faltava para agentes de IA autônomos.

Este artigo foi originalmente publicado em: https://www.linkedin.com/newsletters/ezine-dev-ramos-da-inform%25C3%25A1tica-6947960536550526976/ A inteligência...
Newsletter semanal no LinkedIn
EZine Dev Ramos da Informática
Grandes dicas em JavaScript, Node, React, Next, Banco de Dados & IA.
Assinar grátis
Abre em nova aba
spot_img