Foto de Roberto Sobrinho
Roberto Sobrinho

22/07/2025

Oracle: uso do DECODE no SQL com exemplos e explicações

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)
ElementoDescrição
expressãovalor a ser comparado
valor_npossíveis correspondências
retorno_nvalor 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


Compartilhe

Facebook
Twitter
LinkedIn
WhatsApp
Email
Print

Oracle: uso do DECODE no SQL com exemplos e explicações