Pular para o conteúdo

Linguagem SQL (II) (Variáveis e Funções)

Muitas vezes necessitamos armazenar determinados valores para uso posterior. Um exemplo é guardar um valor total em uma variável para que ele seja usado em cálculo de percentual por exemplo.

DECLARE @NOTA FLOAT --SELECT --> CASE
SET @NOTA = 5 --VARIÁVEIS --> IF
IF @NOTA = 7
PRINT 'APROVADO' --UPDATE ALUNO SET STATUS = 'APROVADO'
ELSE
PRINT 'REPROVADO' --UPDATE ALUNO SET STATUS = 'REPROVADO'

Mais um exemplo

DECLARE @IDADEMEDIA INT
SET @IDADEMEDIA = 
(SELECT AVG(DATEDIFF(YEAR, ClienteNascimento, GETDATE())) as Ano
    from Clientes)

SELECT ClienteNome,DATEDIFF(YEAR, ClienteNascimento, GETDATE()) as Ano 
FROM Clientes 
WHERE DATEDIFF(YEAR, ClienteNascimento, GETDATE()) >= @IDADEMEDIA

Funções

Uma função é uma sequência de comandos que executa alguma tarefa e que tem um nome. A sua principal finalidade é nos ajudar a organizar programas em pedaços que correspondam a como imaginamos uma solução do problema.

Exemplo de uma função simples

CREATE FUNCTION fnRetornaAno (@data DATETIME)
RETURNS int
AS
  BEGIN
  DECLARE @ano int
  SET @ano = YEAR(@data)

      RETURN @ano

END

Mais um exemplo

CREATE FUNCTION fnRetornaIdade
(
    @data DATETIME
    )
RETURNS int
AS
  BEGIN
  DECLARE @ano int
  DECLARE @anoatual int
  DECLARE @IDADE INT
  SET @ano = YEAR(@data)
  set @anoatual = YEAR(GETDATE())
  SET @IDADE = @anoatual - @ano
      RETURN @IDADE
END

Mais exemplos

CREATE FUNCTION rico_pobre (
	@renda money
)
RETURNS CHAR(10) AS
BEGIN
	DECLARE @status CHAR(10);
	IF (@renda > 100000) SET @status = 'rico';
    ELSE SET @status = 'pobre';
 
    RETURN @status
END;
CREATE FUNCTION fn_retorna_bairro (
	@nome CHAR(10)
)
RETURNS TABLE AS
RETURN
	SELECT ClienteBairro
	FROM Clientes
	WHERE ClienteNome = @nome;

Exercícios

  1. Crie uma função que receba o código do estado civil e mostre ele por extenso.
  2. Crie uma função que receba o código do sexo e mostre ele por extenso.

Deixe um comentário

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