Functions e Procedures
O que são Functions e Procedures?
Functions e Procedures permitem encapsular comandos SQL em rotinas reutilizáveis, executadas no servidor do banco de dados. Isso reduz o tráfego de rede, aumenta a segurança e otimiza o desempenho das aplicações.
- Functions: Sempre retornam um valor e podem ser usadas em consultas
SQL (ex:
SELECT). - Procedures: Podem ou não retornar valores e são executadas via
comando
CALL. São ideais para operações como inserções, atualizações ou exclusões.
Diferenças entre Functions e Procedures
| Característica | Function | Procedure |
|---|---|---|
| Retorno | Sempre retorna um valor | Pode retornar ou não |
| Chamada | Usada em SELECT, WHERE, etc. |
Executada via CALL |
| Uso comum | Cálculos, consultas, transformações | Ações como inserir, atualizar, deletar |
Tipos de Functions no PostgreSQL
O PostgreSQL suporta diferentes tipos de functions, dependendo da complexidade da lógica:
- Funções em SQL: Usam comandos SQL simples (ex:
SELECT). Ideais para operações diretas. - Funções em PL/pgSQL: Suportam estruturas de controle (ex:
IF,LOOP) e são usadas para lógicas complexas. - Funções em linguagens externas: Podem ser escritas em Python, Java, C, etc., para algoritmos de alto desempenho.
Vantagens e Desvantagens
Vantagens:
- Reutilização de código: Blocos modulares evitam repetição.
- Menor tráfego de rede: A lógica é executada no servidor.
- Segurança: Restringe acesso direto a tabelas sensíveis.
Desvantagem:
- Dependência de plataforma: Sintaxe varia entre SGBDs (ex: PostgreSQL vs. Oracle).
Sintaxe Básica
Procedure:
CREATE PROCEDURE nome_procedure(IN param1 tipo, OUT resultado tipo)
LANGUAGE plpgsql
AS $$
BEGIN
-- Comandos SQL
END;
$$;
Function:
CREATE FUNCTION nome_funcao(param1 tipo) RETURNS tipo
LANGUAGE plpgsql
AS $$
DECLARE
variavel tipo;
BEGIN
-- Comandos SQL
RETURN variavel;
END;
$$;
Exemplos Práticos
Exemplo 1: Function que retorna uma mensagem
CREATE FUNCTION sp_ola() RETURNS TEXT
LANGUAGE SQL
AS $$
SELECT 'Olá, Pessoal!';
$$;
-- Uso:
SELECT sp_ola();
Exemplo 2: Function com filtro por estado
CREATE FUNCTION clientes_por_estado(est VARCHAR)
RETURNS TABLE(codigo INT, nome VARCHAR, estado VARCHAR)
LANGUAGE SQL
AS $$
SELECT codigo_cliente, nome_cliente, uf
FROM cliente
WHERE uf = est;
$$;
-- Uso:
SELECT * FROM clientes_por_estado('RJ');
Exemplo 3: Procedure com notificação
CREATE PROCEDURE log_mensagem()
LANGUAGE plpgsql
AS $$
BEGIN
RAISE NOTICE 'Registro atualizado com sucesso!';
END;
$$;
-- Uso:
CALL log_mensagem();
Conclusão
Functions e Procedures são ferramentas poderosas para otimizar e organizar a lógica de bancos de dados. Seu uso adequado melhora desempenho, segurança e manutenibilidade, sendo essencial para aplicações que demandam processamento complexo ou alto volume de transações. Dominar esses conceitos é um diferencial para profissionais que trabalham com bancos de dados relacionais e não relacionais.