As funções escalares no SQL Server são ferramentas poderosas que permitem encapsular uma lógica ou operação que retorna um único valor. Elas são extremamente úteis para operações repetitivas e podem ser chamadas diretamente em instruções SQL, como SELECT, INSERT, UPDATE, entre outras. Neste post, vamos explorar o conceito de função escalar, como criá-las, suas vantagens e alguns exemplos práticos.

Sintaxe básica de uma função escalar

A criação de uma função escalar no SQL Server segue a seguinte estrutura básica:

CREATE FUNCTION NomeDaFuncao(@Parametro Tipo)
RETURNS TipoDeRetorno
AS
BEGIN
    -- Declaração de variáveis (opcional)
    DECLARE @Resultado TipoDeRetorno;

    -- Lógica para calcular o valor de retorno
    SET @Resultado = ...;

    -- Retornar o resultado
    RETURN @Resultado;
END;

Explicação:

  • CREATE FUNCTION: Inicia a definição da função.
  • @Parametro: Parâmetro(s) de entrada que a função pode aceitar.
  • RETURNS TipoDeRetorno: Define o tipo de dado que será retornado pela função (ex: INT, VARCHAR).
  • Bloco BEGIN...END: Contém a lógica da função.
  • RETURN: Utilizado para retornar o valor final.

Exemplo prático de função escalar

Vamos criar uma função escalar que calcula a idade de uma pessoa com base em sua data de nascimento.

Exemplo: Função para calcular idade

CREATE FUNCTION CalcularIdade(@DataNascimento DATE)
RETURNS INT
AS
BEGIN
    DECLARE @Idade INT;

    SET @Idade = DATEDIFF(YEAR, @DataNascimento, GETDATE());

    -- Ajustar se a data de aniversário ainda não ocorreu este ano
    IF (MONTH(@DataNascimento) > MONTH(GETDATE())) OR 
       (MONTH(@DataNascimento) = MONTH(GETDATE()) AND DAY(@DataNascimento) > DAY(GETDATE()))
    BEGIN
        SET @Idade = @Idade - 1;
    END

    RETURN @Idade;
END;

Explicação:

  • Função: CalcularIdade aceita um parâmetro @DataNascimento do tipo DATE e retorna um valor do tipo INT, representando a idade calculada;

  • Cálculo: A função usa DATEDIFF para calcular a diferença entre o ano da data de nascimento e o ano atual. Depois, faz ajustes caso o aniversário da pessoa ainda não tenha ocorrido no ano atual.

Utilizando a função:

Agora, você pode utilizar essa função em suas consultas:

SELECT Nome, CalcularIdade(DataNascimento) AS Idade
FROM Funcionarios;

Isso calculará e exibirá a idade de cada funcionário com base em sua data de nascimento.

Vantagens das funções escalares

As funções escalares oferecem várias vantagens para desenvolvedores e administradores de banco de dados no SQL Server:

  1. Reutilização de código: Ao encapsular lógicas repetitivas dentro de uma função, você pode reutilizar essa lógica em múltiplas consultas sem precisar duplicar o código.

  2. Legibilidade: Funções escalares ajudam a melhorar a legibilidade das consultas, permitindo que cálculos complexos sejam abstraídos por meio de funções de fácil entendimento.

  3. Manutenção: Caso precise alterar a lógica de um cálculo, basta modificar a função em um único lugar, e todas as consultas que a utilizam serão automaticamente atualizadas.

  4. Organização: Funções permitem organizar melhor o código SQL, separando cálculos e transformações em blocos lógicos.

Exemplo avançado de função escalar

Agora vamos ver um exemplo mais avançado, onde a função retorna um valor formatado. Vamos criar uma função que retorna o nome completo de um funcionário, combinando seu nome e sobrenome.

Exemplo: Função para combinar nome e sobrenome

CREATE FUNCTION NomeCompleto(@Nome VARCHAR(50), @Sobrenome VARCHAR(50))
RETURNS VARCHAR(101)
AS
BEGIN
    RETURN @Nome + ' ' + @Sobrenome;
END;

Usando a função:

SELECT NomeCompleto(Nome, Sobrenome) AS NomeCompleto
FROM Funcionarios;

Nesse caso, a função escalar retorna o nome completo, combinando os campos de nome e sobrenome de cada funcionário.

Outro exemplo prático

   //função recebe parâmetro do tipo VARCHAR
    CREATE FUNCTION media_alunos(@nome VARCHAR(50))
    RETURNS REAL // retorna valor do tipo REAL
    AS
    BEGIN
 	DECLARE	@media REAL // declara variável do tipo REAL
	SELECT @media = (nota1 * 2 + nota2 + nota3 + nota4)/5.00 // calcula média
	FROM notas_alunos
	WHERE nome = @nome // filtro - pega nome passado por parâmetro
	RETURN @media // retorna média
   END

Para chamar a função basta digitar:

SELECT dbo.media_alunos('nome_do_aluno')

Limitações das funções escalares

Apesar de serem úteis, as funções escalares têm algumas limitações:

  1. Desempenho: Funções escalares podem afetar o desempenho quando usadas em grandes consultas, pois são processadas linha por linha. Isso é conhecido como “RBAR” (row by agonizing row – linha por linha), o que pode causar degradação de performance em conjuntos de dados muito grandes;

  2. Planos de execução: As funções escalares não são totalmente otimizadas nos planos de execução das consultas, o que pode levar a uma execução menos eficiente em comparação com expressões inline ou funções com valor de tabela;

  3. Dependência de contexto: Como as funções escalares operam fora do contexto da consulta principal, o otimizador de consultas não pode reescrever eficientemente as operações da função dentro de uma única consulta.

Funções escalares vs. outras abordagens

CaracterísticaFunção EscalarFunção com Valor de Tabela InlineViews
Tipo de RetornoValor únicoTabela (múltiplas linhas/colunas)Tabela virtual
DesempenhoPode ser lento em grandes conjuntosGeralmente mais rápidoDesempenho otimizado
ComplexidadeBaixaModeradaSimples (não aceita parâmetros)
Reuso de CódigoAltaAltaModerada

As funções escalares no SQL Server são extremamente úteis para simplificar e reutilizar lógica de cálculos e operações que retornam um valor único.

Embora existam limitações de desempenho, especialmente em consultas com grandes volumes de dados, elas podem ser uma solução eficiente em muitos casos, especialmente quando usadas com parcimônia e em cenários de baixa concorrência de dados.

Ao conhecer bem seu uso e limitações, você pode otimizar o uso dessas funções e melhorar a organização e a clareza do código SQL em seus projetos.

APRENDA BANCO DE DADOS SQL DO BÁSICO AO AVANÇADO!

Domine os principais comandos, Operadores, Manipulação de dados, Funções, Drop e Uploads, Query, SubQuerys, Views, Segurança e muito mais!

O acesso ao nosso curso é vitalício e com suporte exclusivo.

CLIQUE NA IMAGEM ABAIXO PARA MAIS DETALHES:

linux dicas e truques

CLIQUE AQUI E SAIBA MAIS

Dúvidas ou sugestões? Deixem nos comentários! Para mais dicas, acesse o nosso canal no YouTube:
https://youtube.com/criandobits

Tags:

Quer receber GRÁTIS o e-book "Como Formatar um Computador em 5 Minutos"?

Não enviamos spam. Seu e-mail está 100% seguro!

Sobre o Autor

Bene Silva Júnior
Bene Silva Júnior

Bacharel em Sistemas de Informação pelo Instituto Paulista de Pesquisa e Ensino IPEP. Apaixonado por tecnologias e games do tempo da vovó!

0 Comentários

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *