DECODE
compara um valor com várias possibilidades e retorna o resultado correspondente. Útil para renomear valores, aplicar regras fixas, contar registros por condição ou definir ordenações manuais. Facilita consultas com lógica simples, quando não há necessidade de múltiplas expressões ou operadores.
1 – Sintaxe
DECODE(expressão,
valor_1, retorno_1,
valor_2, retorno_2,
...
valor_n, retorno_n,
retorno_padrão)
Elemento | Descrição |
---|---|
expressão | valor a ser comparado |
valor_n | possíveis correspondências |
retorno_n | valor retornado ao bater com valor_n |
retorno_padrão | (opcional) valor usado se nada for igual |
Compara a expressão sequencialmente com os valores e retorna o primeiro correspondente. Se nenhum bater e não houver padrão, retorna NULL.
2 – Criar Dados para Teste
CREATE TABLE t_func (
id NUMBER PRIMARY KEY,
nome_func VARCHAR2(50),
departamento VARCHAR2(30),
salario NUMBER
);
INSERT INTO t_func VALUES (1, 'Ana', 'RH', 2500);
INSERT INTO t_func VALUES (2, 'Carlos', 'TI', 3500);
INSERT INTO t_func VALUES (3, 'Beatriz', 'RH', 2400);
INSERT INTO t_func VALUES (4, 'Eduardo', 'TI', 4100);
INSERT INTO t_func VALUES (5, 'Marina', 'FI', 3800);
INSERT INTO t_func VALUES (6, 'Paulo', 'CO', 3200);
INSERT INTO t_func VALUES (7, 'Luciana', 'TI', 3900);
COMMIT;
3 – Traduzir Nomes de Departamento
SELECT nome_func,
departamento,
DECODE (departamento,
'TI', 'Tecnologia',
'RH', 'Recursos Humanos',
'FI', 'Financeiro',
'CO', 'Comercial', AS nome_departamento
FROM t_func;
.

O campo departamento
guarda códigos curtos. Com o DECODE
, esses valores são convertidos em nomes descritivos. Por exemplo, quando departamento
é TI, retorna Tecnologia. Se não for nenhum dos valores listados, retorna Outro Isso ajuda a gerar relatórios mais legíveis sem alterar os dados originais.
4 – Classificar Faixa Salarial
SELECT nome_func,
salario,
DECODE (TRUNC (salario / 1000),
2, 'Baixo',
3, 'Medio',
4, 'Alto',
'Muito Alto') AS faixa_salarial
FROM t_func;
.

Divide o salário por mil e trunca o resultado para obter a faixa base. Por exemplo, 2400 vira 2 (baixo), 3900 vira 3 (médio) e 4100 vira 4 (alto). Qualquer valor acima de 4999 entra como ‘Muito Alto’. Essa abordagem simplifica classificações por intervalo sem precisar de CASE
ou subqueries.
5 – Contagem Condicional com Agregações
SELECT COUNT (*) AS total_func,
COUNT (DECODE (departamento, 'TI', 1)) AS qtd_ti,
COUNT (DECODE (departamento, 'RH', 1)) AS qtd_rh,
COUNT (DECODE (departamento, 'FI', 1)) AS qtd_fi
FROM t_func;
.

O DECODE
retorna 1 apenas quando a condição bate. No exemplo, COUNT(DECODE(departamento, 'TI', 1))
soma apenas funcionários do setor de TI. Para os demais, DECODE
retorna NULL e o COUNT
ignora. Funciona como um filtro embutido dentro da agregação, evitando cláusulas adicionais.
6 – Projeção de Reajuste Salarial por Departamento
SELECT nome_func,
salario,
DECODE (departamento,
'TI', salario * 1.10,
'RH', salario * 1.05,
'FI', salario * 1.08,
salario) AS salario_reajustado
FROM t_func;
.

Aplica um percentual de reajuste conforme o departamento. TI recebe 10%, RH 5% e FI 8%. Para os demais, mantém o salário original. O cálculo ocorre diretamente dentro do DECODE
.
7 – Ordenação Personalizada
SELECT nome_func, departamento
FROM t_func
ORDER BY DECODE (departamento, 'TI', 1, 'RH', 2, 'FI', 3, 'CO', 4, 5);
.

O DECODE
atribui um número para cada valor de departamento
. Isso permite controlar a ordem de exibição sem depender da ordem alfabética. Os registros com ‘TI’ aparecem primeiro, depois ‘RH’, depois ‘FI’ e por fim os demais.
7 – Conclusão
DECODE
resolve lógica condicional sem enrolação. Ideal para comparar valores fixos e devolver o resultado esperado com poucas linhas. Muito útil em relatórios e scripts legados, substitui estruturas mais verbosas como CASE
, quando a lógica é direta.
e zas
#20250722 #DBASobrinho #GuinaNãoTinhaDó #BóBó #CaceteDeAgulha #OracleACE