Database
 sql >> Base de Dados >  >> RDS >> Database

Qual é o uso da função DECODE no SQL?


No Oracle, a função DECODE nos permite adicionar lógica procedural if-then-else à consulta. Neste blog, tentaremos obter uma compreensão completa da função DECODE no SQL. Estaremos aprendendo as várias maneiras de usar o DECODE, sua sintaxe e entendê-lo com exemplos. Fique conosco até o final do blog.

Os tópicos que serão abordados são:
  • O que é a função DECODE em SQL?
  • A sintaxe da função DECODE
  • Exemplos da função DECODE

Vamos começar um por um.

O que é a função DECODE no SQL?


No Oracle, a função DECODE nos permite adicionar lógica procedural if-then-else à consulta. DECODE compara a expressão a cada valor de pesquisa um por um. Se expressão for igual a uma pesquisa, o resultado correspondente será retornado pelo Banco de Dados Oracle. Se uma correspondência não for encontrada, o padrão será retornado. Se o padrão for omitido, o Oracle retornará nulo.

O tipo de argumentos pode ser:
  • Tipos numéricos (NUMBER, BINARY_FLOAT ou BINARY_DOUBLE)

Se o primeiro par de resultados de pesquisa for numérico, o Oracle compara todas as expressões de resultados de pesquisa e a primeira expr para localizar o argumento com a precedência numérica mais alta, converte os argumentos restantes implicitamente para esse tipo de dados e retorna esse tipo de dados específico.
  • Tipos de caracteres

Se expr e search forem dados de caracteres, o Oracle os comparará usando semântica de comparação não preenchida. expr, search e o resultado pode ser qualquer um dos tipos de dados CHAR, VARCHAR2, NCHAR ou NVARCHAR2. A String retornada é do tipo de dados VARCHAR2 e está no mesmo conjunto de caracteres que o primeiro parâmetro de resultado.

O banco de dados Oracle usa avaliação de curto-circuito. Ele avalia os valores de pesquisa apenas antes de compará-lo com a expressão, em vez de avaliar todos os valores de pesquisa. Se uma pesquisa anterior for igual a expressão, a avaliação é encerrada.

O Oracle converte os valores expr e search para o tipo de dados do primeiro valor de pesquisa antes da comparação. E converte o valor de retorno para o mesmo tipo de dados que o primeiro resultado.

Exemplo: Se o primeiro resultado tiver o tipo de dados CHAR ou se o primeiro resultado for nulo, o Oracle converterá o valor de retorno no tipo de dados VARCHAR2.

Dois nulos são considerados equivalentes pela Oracle. Se expr for nulo, o Oracle retornará NULL, que é o resultado da primeira pesquisa.

O número máximo de componentes que podem estar contidos na função DECODE é 255. Isso inclui os argumentos de expressão, pesquisa e resultado.

A função DECODE pode ser usada nas seguintes versões do Oracle ou PLSQL:

Oracle 12c, Oracle 11g, Oracle 10g, Oracle 9i

Um exemplo básico:

No exemplo a seguir, a função Oracle DECODE() compara o primeiro argumento com o segundo argumento. Como eles são iguais, a função retorna o segundo argumento que é a string ‘One’.
SELECT
DECODE(1, 1, 'One')
FROM
dual;

A sintaxe da função DECODE é:


DECODE(expressão , pesquisa , resultado [, pesquisa , resultado]… [, padrão(opcional)])



expressão

O valor que deve ser comparado. Ele é convertido automaticamente para o tipo de dados do primeiro valor de pesquisa antes de comparar.

pesquisar

O valor que é comparado com a expressão.

resultado

O valor retornado, se expressão=pesquisa.

padrão

Se não houver correspondências, a função DECODE retornará o padrão e, se o padrão for omitido, a função retornará NULL.

Exemplos da função DECODE
  • A função DECODE pode ser usada no Oracle/PLSQL da seguinte forma
SELECT bank_name,
DECODE(bank_id, 001, 'SBI',
                    002, 'ICICI',
                    003, ‘Dena',
                    'Gateway') result
FROM banks;

Instrução IF-THEN-ELSE equivalente para a instrução DECODE() acima:
IF bank_id = 001 THEN
   result := 'SBI';

ELSIF bank_id = 002 THEN
   result := 'ICICI';

ELSIF bank_id = 003 THEN
   result := 'Dena';

ELSE
   result := 'Gateway';

END IF;

A função DECODE irá comparar cada valor bank_id, um por um.
  • Função DECODE para comparar duas datas (data1 e data2), onde, se data1> data2, a função DECODE deve retornar data2. Caso contrário, a função DECODE deve retornar date1
DECODE((date1 - date2) - ABS(date1 - date2), 0, date2, date1)

A fórmula abaixo é igual a 0, se data1 for maior que data2:
(date1 - date2) - ABS(date1 - date2)

O exemplo de data ilustrado acima também pode ser modificado da seguinte forma:
DECODE(SIGN(date1-date2), 1, date2, date1)
  • Instrução DECODE que retornará o seguinte:

Se horas_de_trabalho <1, retorne 0,04
Se hours_of_work>=1 e <5, então retorne 0,04
Se hours_of_work> 5, então retorne 0,06

Aqui, você precisa criar uma fórmula que será avaliada em um único número para cada um de seus intervalos.
SELECT emp_name,
DECODE(TRUNC (( hours_of_work + 3) / 4), 0, 0.04,
                                          1, 0.04,
                                          0.06) as perc_value
FROM employees;

Isso é tudo sobre a função DECODE, agora você deve ter uma ideia clara de como ela funciona e quão útil é essa função. Agora, tente usá-los sempre que qualquer lógica IF-ELSE for necessária ao trabalhar no SQL. Espero que o artigo tenha ajudado você com os conceitos da instrução DECODE.

Se você deseja aprender mais sobre o MySQL e conhecer esse banco de dados relacional de código aberto, confira nosso Treinamento de certificação de DBA MySQL que vem com treinamento ao vivo conduzido por instrutor e experiência de projeto na vida real. Este treinamento ajudará você a entender o MySQL em profundidade e a dominar o assunto.

Tem alguma pergunta para nós? Mencione-o na seção de comentários de "DECODE in SQL" e eu entrarei em contato com você.