Como referenciar este texto: ‘Criando funções em SQL’. Rodrigo Terra. Publicado em: 18/02/2025. Link da postagem: https://www.makerzine.com.br/dados/criando-funcoes-em-sql/.
Conteúdos que você verá nesta postagem
No contexto de bancos de dados relacionais, a criação de funções em SQL é um recurso poderoso para encapsular lógica reutilizável, tornando consultas mais organizadas e eficientes. As funções permitem que desenvolvedores e administradores de banco de dados executem operações específicas, retornando valores únicos ou conjuntos de resultados. Diferentemente das stored procedures, que podem executar múltiplas operações e retornar diversos tipos de resultados, as funções são projetadas para retornar um valor específico e são frequentemente utilizadas em consultas SQL.
Primeiros passos ...
A criação de uma função em SQL geralmente envolve a definição do nome da função, dos parâmetros de entrada, do tipo de retorno e do corpo da função, que contém a lógica a ser executada. Em sistemas como PostgreSQL, SQL Server e MySQL, a sintaxe pode variar, mas segue um padrão semelhante.
A seguir, um exemplo básico de criação de uma função em SQL:
CREATE FUNCTION dbo.CalculaDesconto (@preco DECIMAL(10,2), @desconto DECIMAL(5,2))
RETURNS DECIMAL(10,2)
AS
BEGIN
RETURN @preco - (@preco * @desconto / 100);
END;
Neste exemplo, a função CalculaDesconto
recebe um preço e uma porcentagem de desconto, retornando o valor final com o desconto aplicado.
Para utilizá-la, basta chamá-la dentro de uma consulta:
SELECT dbo.CalculaDesconto(100, 10) AS PrecoFinal;
O uso de funções em SQL facilita a manutenção do código, melhora a reutilização e pode otimizar o desempenho de consultas repetitivas. Além disso, sua implementação auxilia na padronização de cálculos e regras de negócio dentro do banco de dados.
Aprofundando a criação de funções em SQL
A criação de funções personalizadas em SQL permite automatizar cálculos e reduzir a repetição de código, proporcionando mais eficiência e clareza no desenvolvimento de consultas.
O exemplo abaixo, destaca-se um caso comum em bancos de dados: a necessidade de calcular diferenças entre datas em diferentes unidades de tempo (dias, semanas, meses e anos).
Criando a Função datediff
A função datediff
definida no script permite calcular diferenças entre datas com base em uma unidade de tempo especificada (dias
, semanas
, meses
ou anos
):
CREATE FUNCTION datediff(unidade VARCHAR, data_inicial DATE, data_final DATE)
RETURNS INTEGER
LANGUAGE sql
AS
$$
SELECT
CASE
WHEN unidade IN ('d', 'day', 'days') THEN (data_final - data_inicial)
WHEN unidade IN ('w', 'week', 'weeks') THEN (data_final - data_inicial) / 7
WHEN unidade IN ('m', 'month', 'months') THEN (data_final - data_inicial) / 30
WHEN unidade IN ('y', 'year', 'years') THEN (data_final - data_inicial) / 365
END AS diferenca;
$$
Explicação da Função
- A função recebe três parâmetros:
unidade
: define a unidade de tempo para o cálculo (dias, semanas, meses ou anos).data_inicial
: a data de referência.data_final
: a data até onde a diferença será calculada.
- A lógica do
CASE
verifica a unidade solicitada e realiza a conversão apropriada. - O resultado é um valor inteiro representando a diferença na unidade escolhida.
Isso permite chamar a função de forma prática e intuitiva:
SELECT datediff('years', '2021-02-04', current_date);
Que retornará a diferença em anos entre 2021-02-04
e a data atual.
Vantagens do Uso de Funções em SQL
Reutilização e Organização
Criar funções comodatediff
evita a repetição de cálculos e melhora a manutenção do código.Maior Clareza nas Consultas
Ao invés de escrever expressões matemáticas repetitivas para cada cálculo, basta chamar a função.Facilidade de Atualização
Se a lógica precisar de ajustes, a alteração ocorre apenas na função, sem necessidade de modificar múltiplos scripts SQL.Padronização dos Cálculos
Em sistemas que utilizam múltiplas consultas para calcular diferenças de datas, uma função centralizada garante consistência nos resultados.
Se você acha que este conteúdo pode ser útil para alguém, compartilhe!
Ao divulgar os textos do MakerZine, você contribui para que todo o material continue acessível e gratuito para todas as pessoas.