Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Como usar o Decode no Oracle

Introdução à decodificação sql do Oracle


Nesta seção, discutiremos sobre o processamento de decodificação do Oracle, que é um aspecto muito importante da instrução sql do Oracle

Oráculo decode é o método no banco de dados Oracle para transformar valores de dados de um valor para outro que é melhor entender. O Oracle Decode transforma valores de dados no momento da recuperação.

É um tipo de If then else para o processamento

O bloco de código para Oracle sql Decode está abaixo

decode(expressão ou nome da coluna, correspondência, resultado [,correspondência, resultado]…[,padrão])

Aqui está o significado dos termos no código acima
a) expressão ou coluna é o valor a ser comparado
b) correspondência é o valor que é comparado com a expressão
c) resultado é o valor retornado, se a expressão for igual a corresponder
d) o padrão é opcional. Se nenhuma correspondência for encontrada, a decodificação retornará o padrão. Se default for omitido, a instrução decode retornará NULL (nenhuma correspondência encontrada).
Exemplo


selecione
decodificar (
Código de fase,
'P','Pendente',
'C','Concluído',
'T',' Terminado',
'S','Em espera',
'DESCONHECIDO'
)
de
FND_REQUESTS;




Aqui está o algoritmo para entender melhor

1) O Oracle recupera  o valor da coluna do código da fase
2) se o código da fase ='P'  então pendente
3) se o código da fase ='C'  então concluído
4) se o código da fase ='T' então Terminado
5) se o código de fase ='S' então em espera
6) Se o código de fase não for nenhuma das opções acima, a decodificação retornará Desconhecido
7) Se o padrão não estiver presente vai dar null

Observe que a decodificação do Oracle começa especificando o nome da coluna ou expressão , seguido pelo conjunto de pares correspondentes de valores de transformação. No final da instrução decode, encontramos um valor padrão. O valor padrão informa ao decodificar o que exibir se os valores de uma coluna não estiverem na lista pareada.

Poderíamos dizer o algoritmo assim
if (expr ==search1)
return(result1);
elseif (expr ==search2)
return( result2);
…elseif (expr ==searchn)
return(resultn);
else
return(default);


Mais alguns pontos a serem lembrados para o Oracle Decode


1) Em uma função DECODE, o Oracle considera dois nulos equivalentes. Se expr for nulo, o Oracle retornará o resultado da primeira pesquisa que também for nulo.

SQL> SELECT decode(null,null,1,0) FROM dual;
DECODE(NULL,NULL,1,0)
———————
1

2) O número máximo de componentes na função DECODE, incluindo expr, pesquisas, resultados e padrão, é 255.

3)O Oracle converte automaticamente os valores de expression e compare_value para o tipo de dados do primeiro compare_value. Além disso, o tipo de dados do valor_de_retorno é convertido no tipo de dados do primeiro valor_de_retorno. Se o primeiro resultado tiver o tipo de dados CHAR ou se o primeiro resultado for nulo, o Oracle converterá o valor de retorno para o tipo de dados VARCHAR2

Como ler decodificação no Oracle


podemos ler a instrução decode como if-else if. O primeiro argumento na instrução decode geralmente será alguma coluna onde a transformação de dados é necessária. O argumento depois disso estará comparando os valores do primeiro argumento com ele

Perguntas frequentes sobre o processamento de decodificação do Oracle sql

(1)Vimos que "expr" sendo igualado a valores especificados, podemos usar operadores de desigualdade como> ou
Vamos dar um exemplo
SELECT DECODE(salary,<50000, sal + 1000, sal + 500) Final_salary FROM emp;
ERROR at line 2
ORA-00936:missing expression
Então não podemos usar isso. Precisamos usar uma instrução case para fazer isso. ou podemos assinar a função em decodificar  para alcançá-lo
SELECT DECODE(sign(salary- 50000), -1,sal + 1000, sal + 500) Final_salary FROM emp;
Basicamente, precisamos converter nosso requisito para alguma fórmula que pode avaliar algum valor
(2) Como comparar dois valores de coluna usando a decodificação oracle?
SELECT col1,col2 decode( abs(col1-col2), 0, ‘col1 =col2’,Col1-col2, ‘col1> col2′,’col1 FROM example_tab;
(3) Qual é a diferença entre Decode e CASE
CASE pode funcionar como uma construção PL/SQL, mas DECODE é usado apenas em instruções SQL. CASE pode ser usado como um parâmetro de uma função/procedimento.
CASE espera consistência de tipo de dados, DECODE não
CASE espera tipo de dados consistência, DECODE não
DECODE pode trabalhar apenas com valores escalares, mas CASE pode trabalhar com operadores lógicos, predicados e subconsultas pesquisáveis.
(4) A decodificação do oráculo tem um limite
Sim O número máximo de componentes na função DECODE, incluindo expr, pesquisas, resultados e padrão, é 255.

Links relacionados
Documentação Oracle sobre decodificação
como escrever consultas sql
Instrução Sql básica
Instrução Oracle Case explicada com dicas e exemplos
Tutorial SQL