CASE
WHEN THEN
ELSE
END
Professor Esp. Diego André Sant’Ana
E-mail: [email protected]
Disciplina: Banco de Dados II
professordiegosantana.wordpress.com
O que é case

É uma expressão condicional existente no SQL que faz a função
similar do if/else.

CASE
WHEN (CONDICAO) THEN (VALOR)
ELSE (VALOR)
END



Exemplo
SELECT
CASE
WHEN A.SEXO='F' THEN 'FEMININO'
WHEN A.SEXO='M' THEN 'MASCULINO'
ELSE 'INDEFINIDO'
END ,
CASE A.SEXO
WHEN 'F' THEN 'FEMININO'
WHEN 'M' THEN 'MASCULINO'
ELSE 'INDEFINIDO'
END
FROM
(
SELECT 'F' AS SEXO
UNION ALL
SELECT 'M'
UNION ALL
SELECT 'I'
)A
Exemplo
select NOME_ALUNO,
case
when idade<18 then 'MENOR DE IDADE'
else 'MAIOR DE IDADE'
end AS STATUS_IDADE
from prova.aluno
Exemplo
SELECT
CASE
WHEN NOME_ALUNO ILIKE 'ANA%' THEN NOME_ALUNO||'
IFMS'
ELSE NOME_ALUNO
END
FROM PROVA.ALUNO
Exemplo
SELECT IDADE,
CASE IDADE%2
WHEN 0 THEN 'PAR'
WHEN 1 THEN 'IMPAR'
END
FROM PROVA.ALUNO
Funções ou procedures
Professor Esp. Diego André Sant’Ana
E-mail: [email protected]
Disciplina: Banco de Dados II
professordiegosantana.wordpress.com
Exemplo de funções

As funções que utilizamos que já existe e o AVG(),MAX(),MIN(),
NOW() e etc.
Estrutura básica
CREATE OR REPLACE FUNCTION
nome_da_funcao ( parametros )

RETURNS tipo_retorno AS
 $$
 DECLARE

--declaracao de variaveis
 BEGIN

--conteudo da funcao
 END;
 $$ LANGUAGE linguagem;

Função soma
CREATE OR REPLACE FUNCTION get_soma( integer
,integer) RETURNS integer AS
$$
DECLARE
soma INTEGER;
BEGIN
return $1+$2;
END;
$$ LANGUAGE 'plpgsql';

select get_soma(2,3)
Função divisão

CREATE OR REPLACE FUNCTION get_divisao ( integer
,integer) RETURNS integer AS
$$
DECLARE
soma INTEGER;
BEGIN
return $1/$2;
END;
$$ LANGUAGE 'plpgsql';

select get_divisao(2,3)







Função IMC

CREATE OR REPLACE FUNCTION get_imc( peso integer
,altura numeric) RETURNS numeric AS
$$
DECLARE
soma INTEGER;
BEGIN
return $1/($2*2);
END;
$$ LANGUAGE 'plpgsql';

select get_imc (2,3)







Crie a tabela
CREATE TABLE usuario (
 id integer NOT NULL,
 nm_login character varying,
 ds_senha character varying,
 fg_bloqueado boolean,
 nu_tentativa_login integer,
 CONSTRAINT pk_usuario PRIMARY
KEY (id)
 );

Criar a função
CREATE OR REPLACE FUNCTION get_id (
varchar ) RETURNS integer AS
 $$
 DECLARE

variavel_id INTEGER;
 BEGIN

SELECT INTO variavel_id id FROM
usuario WHERE nm_login = $1;

RETURN variavel_id;
 END;
 $$ LANGUAGE 'plpgsql';

Sobre a função





A função acima (chamada get_id) recebe
como parâmetro um VARCHAR e retorna um
INTEGER, e funciona da seguinte forma:
- declara uma variável chamada variavel_id, do tipo
INTEGER;
- faz um select na tabelas de usuário onde a
coluna nm_login é igual ao varchar recebido como
parâmetro, e colocar o valor de id encontrado
dentro da variável variavel_id (através do
comandoSELECT INTO);
- retorna a variavel_id.
O $1 representa o primeiro parâmetro recebido, o
$2 o segundo, e assim por diante.
Para executar

SELECT get_id( 'joao' );
Exemplo de função

CREATE OR REPLACE FUNCTION set_tentativa_login ( VARCHAR, VARCHAR )
RETURNS VOID AS


$$

DECLARE

registro RECORD;

tentativas INTEGER;

BEGIN

SELECT INTO registro id, fg_bloqueado, nu_tentativa_login FROM usuario WHERE nm_login = $1 AND ds_senha = $2;

IF registro IS NULL

THEN

SELECT INTO tentativas nu_tentativa_login FROM usuario WHERE nm_login = $1;

tentativas := tentativas + 1;

IF tentativas > 2

THEN
UPDATE usuario SET nu_tentativa_login = tentativas, fg_bloqueado = TRUE where nm_login = $1;

ELSE

UPDATE usuario SET nu_tentativa_login = tentativas where nm_login = $1;

END IF;

ELSE

UPDATE usuario SET nu_tentativa_login = 0 where nm_login = $1;

END IF;


END;

$$

LANGUAGE 'plpgsql';
Exemplo de chamada login
SELECT set_tentativa_login( 'hallan', 'senha_errada' );
SELECT set_tentativa_login( 'maria', 'senha_errada' );
SELECT set_tentativa_login( 'hallan', 'hallan2011' );
REFERÊNCIAS
http://blog.hallanmedeiros.com/docencia/ba
nco-de-dados-tutorial/postgresql-funcoes/
Download

CASE WHEN THEN ELSE END