9.12. Expressões condicionais

Esta seção descreve as expressões condicionais em conformidade com o SQL disponíveis no PostgreSQL.

Dica: Havendo alguma necessidade não atendida pelas funcionalidades destas expressões condicionais, deve ser considerado o desenvolvimento de um procedimento armazenado usando uma linguagem de programação com mais recursos.

9.12.1. CASE

A expressão CASE do SQL é uma expressão condicional genérica, semelhante às declarações if/else de outras linguagens:

CASE WHEN condição THEN resultado
     [WHEN …]
     [ELSE resultado]
END

A cláusula CASE pode ser usada em qualquer lugar onde uma expressão for válida. A condição é uma expressão que retorna um resultado boolean. Se o resultado for verdade, então o valor da expressão CASE é o resultado que segue a condição. Se o resultado for falso, todas as cláusulas WHEN seguintes são analisadas da mesma maneira. Se o resultado de nenhuma condição WHEN for verdade, então o valor da expressão CASE é o valor do resultado na cláusula ELSE. Se a cláusula ELSE for omitida, e nenhuma condição for satisfeita, o resultado será nulo.

Exemplo:

=> SELECT * FROM teste;

 a
---
 1
 2
 3

=> SELECT a,
->    CASE WHEN a=1 THEN 'um'
->         WHEN a=2 THEN 'dois'
->         ELSE 'outro'
->    END AS caso
-> FROM teste;

 a | caso
---+-------
 1 | um
 2 | dois
 3 | outro

Os tipos de dado de todas as expressões resultado devem ser conversíveis em um único tipo de dado de saída. Veja a Seção 10.5 para obter mais detalhes.

A expressão CASE "simplificada", mostrada abaixo, é uma variante especializada da forma geral mostrada acima [1] [2] :

CASE expressão
    WHEN valor THEN resultado
    [WHEN …]
    [ELSE resultado]
END

A expressão é computada e comparada com todas as especificações de valor nas cláusulas WHEN, até encontrar um que seja igual. Se não for encontrado nenhum valor igual, é retornado o resultado na cláusula ELSE (ou o valor nulo). Esta forma é semelhante à declaração switch da linguagem C.

O exemplo mostrado acima pode ser escrito utilizando a sintaxe simplificada da expressão CASE:

=> SELECT a,
->    CASE a WHEN 1 THEN 'um'
->           WHEN 2 THEN 'dois'
->           ELSE 'outro'
->    END AS caso
-> FROM teste;

 a | caso
---+-------
 1 | um
 2 | dois
 3 | outro

A expressão CASE não processa nenhuma subexpressão que não seja necessária para determinar o resultado. Por exemplo, esta é uma forma possível de evitar o erro gerado pela divisão por zero:

SELECT … WHERE CASE WHEN x <> 0 THEN y/x > 1.5 ELSE false END;

9.12.2. COALESCE

COALESCE(valor [, …])

A função COALESCE retorna o primeiro de seus argumentos que não for nulo. Só retorna nulo quando todos os seus argumentos são nulos. Geralmente é útil para substituir o valor padrão quando este é o valor nulo, quando os dados são usados para exibição. Por exemplo:

SELECT coalesce(descrição, descrição_curta, '(nenhuma)') …

Como a expressão CASE, a função COALESCE não processa os argumentos que não são necessários para determinar o resultado, ou seja, os argumentos à direita do primeiro argumento que não for nulo não são avaliados.

9.12.3. NULLIF

NULLIF(valor1, valor2)

A função NULLIF retorna o valor nulo se, e somente se, valor1 e valor2 forem iguais. Senão, retorna valor1. Pode ser utilizada para realizar a operação inversa do exemplo para COALESCE mostrado acima:

SELECT nullif(valor, '(nenhuma)') …

Notas

[1]

SQL Server 2000 — Aceita tanto a forma geral quanto a forma simplificada da expressão CASE. (N. do T.)

[2]

Oracle 10g — Aceita tanto a forma geral quanto a forma simplificada da expressão CASE. (N. do T.)

SourceForge.net Logo