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
				


