Function e Procedure

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.