Neste capítulo
- Uso de Funções Embutidas: As ferramentas prontas para uso do PostgreSQL.
- Criação de Funções (
CREATE FUNCTION): Estendendo o SQL com lógica personalizada.- Scripts SQL no PostgreSQL: Automatizando sequências de comandos.
- Introdução a PL/pgSQL (Opcional): A linguagem procedural nativa do PostgreSQL.
- Informações Adicionais: Triggers: Automação baseada em eventos.
Até agora, nossa interação com o banco de dados tem sido baseada em comandos SQL diretos. No entanto, para construir sistemas robustos e eficientes, é essencial ir além e utilizar a capacidade do PostgreSQL de encapsular lógicas complexas e automatizar tarefas. O uso de funções e a execução de scripts são a chave para reutilizar código, garantir a consistência de regras de negócio e melhorar a performance. Este capítulo explora como você pode ir além das consultas e programar dentro do seu banco de dados.
O PostgreSQL possui uma vasta biblioteca de funções pré-definidas (embutidas) que podem ser usadas diretamente em suas consultas SELECT, WHERE, ORDER BY, etc. Elas facilitam a manipulação de dados sem a necessidade de processamento adicional na sua aplicação.
Funções de String:
UPPER(string): Converte a string para maiúsculas.
LOWER(string): Converte a string para minúsculas.
TRIM(string): Remove espaços em branco do início e do final da string.
CONCAT(string1, string2, ...): Concatena duas ou mais strings.
SELECT CONCAT(nome, ' - ', cidade) AS cliente_cidade FROM clientes;
Funções Numéricas:
ROUND(valor, casas_decimais): Arredonda um número.
CEIL(valor): Retorna o menor número inteiro maior ou igual ao valor.
FLOOR(valor): Retorna o maior número inteiro menor ou igual ao valor.
SELECT ROUND(AVG(valor_total), 2) AS valor_medio_pedidos FROM pedidos;
Funções de Data e Hora:
NOW(): Retorna a data e hora atuais.
CURRENT_DATE: Retorna a data atual.
AGE(data_fim, data_inicio): Calcula a diferença entre duas datas.
SELECT nome, NOW() - data_pedido AS tempo_desde_pedido FROM pedidos JOIN clientes ON clientes.id_cliente = pedidos.id_cliente;
CREATE FUNCTION)Além das funções embutidas, você pode criar suas próprias funções personalizadas para encapsular lógicas de negócio complexas. Uma função definida pelo usuário é um bloco de código que aceita parâmetros, executa um conjunto de comandos SQL e retorna um resultado.
A sintaxe básica para criar uma função é:
CREATE OR REPLACE FUNCTION nome_da_funcao(parametro1 tipo, parametro2 tipo, ...)
RETURNS tipo_de_retorno AS $$
BEGIN
-- Lógica da função aqui
-- RETURN resultado;
END;
$$ LANGUAGE plpgsql;
Exemplo Prático: Criar uma função para calcular o valor total de um pedido, incluindo uma taxa de serviço.
CREATE OR REPLACE FUNCTION calcular_total_pedido(id_do_pedido INT)
RETURNS DECIMAL AS $$
DECLARE
total_pedido DECIMAL;
BEGIN
SELECT valor_total INTO total_pedido FROM pedidos WHERE id_pedido = id_do_pedido;
RETURN total_pedido * 1.05; -- Adiciona 5% de taxa de serviço
END;
$$ LANGUAGE plpgsql;
Como usar a função:
SELECT calcular_total_pedido(1);