sql >> Base de Datos >  >> RDS >> Oracle

Cómo usar Decode en Oracle

Introducción a la decodificación de SQL de Oracle

En esta sección, discutiremos sobre el procesamiento de decodificación de Oracle, que es un aspecto muy importante de la declaración sql de Oracle

Oráculo decode es el método en la base de datos de Oracle para transformar valores de datos de un valor a otro que es mejor entender. Oracle Decode transforma los valores de los datos en el momento de la recuperación.

Es un tipo de si entonces si no para el procesamiento

El bloque de código para Oracle sql Decode está debajo

decodificar(expresión o nombre de columna, coincidencia, resultado [,coincidencia, resultado]…[,predeterminado] )

Estos son los significados de los términos del código anterior
a) expresión o columna es el valor a comparar
b) coincidencia es el valor que se compara con la expresión
c) resultado es el valor devuelto, si la expresión es igual a la coincidencia
d) el valor predeterminado es opcional. Si no se encuentran coincidencias, la decodificación devolverá el valor predeterminado. Si se omite el valor predeterminado, la declaración de decodificación devolverá NULL (no se encontraron coincidencias).

Ejemplo

seleccione
decodificar (
Código de fase,
'P','Pendiente',
'C','Completado',
'T',' Terminado',
'S','En espera',
'DESCONOCIDO'
)
de
FND_REQUESTS;

Aquí está el algoritmo para entenderlo mejor

1) Oracle recupera el valor de la columna del código de fase
2) si el código de fase ='P' entonces Pendiente
3) si el código de Fase ='C' entonces Completado
4) si el código de Fase ='T'  luego Terminado
5) si el código de fase ='S'  luego en espera
6) Si el código de fase no es ninguno de los anteriores, la decodificación devuelve Desconocido
7) Si el valor predeterminado no está presente dará nulo

Tenga en cuenta que la decodificación de Oracle comienza especificando el nombre de la columna o la expresión, seguida de un conjunto de valores de transformación de pares coincidentes. Al final de la declaración de decodificación encontramos un valor predeterminado. El valor predeterminado le dice a decode qué mostrar si los valores de una columna no están en la lista emparejada.

Podríamos decir el algoritmo así

if (expr ==buscar1)
return(resultado1);
elseif (expr ==buscar2)
return( resultado2);
…elseif (expr ==buscarn)
return(resultn);
else
return(predeterminado);

Algunos puntos más para recordar para Oracle Decode

1) En una función DECODE, Oracle considera que dos nulos son equivalentes. Si expr es nulo, Oracle devuelve el resultado de la primera búsqueda que también es nulo.

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

2) El número máximo de componentes en la función DECODE, incluidos expr, búsquedas, resultados y predeterminados, es 255.

3) Oracle convierte automáticamente los valores de expresión y comparar_valor al tipo de datos del primer comparar_valor. Además, el tipo de datos de return_value se convierte al tipo de datos del primer return_value. Si el primer resultado tiene el tipo de datos CHAR o si el primer resultado es nulo, Oracle convierte el valor devuelto al tipo de datos VARCHAR2

Cómo leer decodificar en Oracle

podemos leer la declaración de decodificación como una declaración if-else if. El primer argumento en la declaración de decodificación será generalmente alguna columna donde se necesita la transformación de datos. El siguiente argumento será comparar los valores del primer argumento con él

Preguntas frecuentes sobre el procesamiento de Oracle sql Decode

(1) Hemos visto que "expr" se equipara a valores específicos. ¿Podemos usar operadores de desigualdad como> o

Tomemos un ejemplo
SELECT DECODE(salary,<50000, sal + 1000, sal + 500) Final_salary FROM emp;
ERROR en la línea 2
ORA-00936:expresión faltante
Así que no podemos usar eso. Necesitamos usar una declaración de caso para hacerlo. o podemos firmar la función en decode  para lograrlo
SELECT DECODE(sign(salary- 50000), -1,sal + 1000, sal + 500) Final_salary FROM emp;
Básicamente, necesitamos convertir nuestro requisito a alguna fórmula que pueda evaluar algún valor

(2) ¿Cómo comparar dos valores de columna usando la decodificación de Oracle?

SELECCIONE col1,col2 decodificar( abs(col1-col2), 0, 'col1 =col2',Col1-col2, 'col1> col2′,'col1 FROM example_tab;

(3) ¿Cuál es la diferencia entre Decode y CASE

CASE puede funcionar como una construcción PL/SQL, pero DECODE solo se usa en sentencias SQL. CASE se puede usar como parámetro de una función/procedimiento.
CASE espera consistencia de tipo de datos, DECODE no
CASE espera tipo de datos coherencia, DECODE no
DECODE puede funcionar solo con valores escalares, pero CASE puede funcionar con operadores lógicos, predicados y subconsultas que permiten búsquedas.

(4) ¿La decodificación de Oracle tiene un límite

Sí El número máximo de componentes en la función DECODE, incluidos expr, búsquedas, resultados y predeterminados, es 255.

Enlaces relacionados
Documentación de Oracle sobre decodificación
cómo escribir consultas sql
Declaración básica de Sql
Declaración de caso de Oracle explicada con consejos y ejemplos
Tutorial de SQL