Oracle/PLSQL: función de decodificación

Los datos expuestos en este blog, son solo de índole informativo. Por favor realiza siempre una copia de seguridad antes de realizar cualquier cambio en tu proyecto.

Oracle/PLSQL: función de decodificación

Este tutorial de Oracle explica cómo usar Oracle/PLSQL Función de decodificación Con sintaxis y ejemplos.

describir

La función DECODE de Oracle/PLSQL funciona como una instrucción IF-THEN-ELSE.

sintaxis

La sintaxis de la función DECODE en Oracle/PLSQL es:

DECODE( expression , search , result [, search , result]... [, default] )

parámetro o parámetro

El valor con el que comparar la expresión. Se convierte automáticamente al tipo de datos del primer valor buscado antes de la comparación. El valor que busca se compara con la expresión. Todos los valores de búsqueda se convierten automáticamente al tipo de datos del primer valor de búsqueda antes de compararlos. Resultado Devuelve el valor si la expresión es igual a la búsqueda. Opcional por defecto. Si no se encuentra ninguna coincidencia, la función DECODE devuelve el valor predeterminado. Si se omite el valor predeterminado, la función DECODE devolverá NULL si no se encuentra ninguna coincidencia.

devolver los bienes

La función DECODE devuelve un valor del mismo tipo de datos que el primer resultado de la lista.
Si el primer resultado es NULL, el valor devuelto se convierte en VARCHAR2.
Si el tipo de datos del primer resultado es CHAR, el valor de retorno se convertirá a VARCHAR2.
Si no se encuentra ninguna coincidencia, se devuelve el valor predeterminado.
Si se omite el valor predeterminado y no se encuentra ninguna coincidencia, se devuelve NULL.

aplicar para

La función DECODE está disponible en las siguientes versiones de Oracle/PLSQL:

  • Oráculo 12c, Oráculo 11g, Oráculo 10g, Oráculo 9i

ejemplo

La función DECODE se puede utilizar en Oracle/PLSQL.

Puede usar la función DECODE en una declaración SQL de la siguiente manera:

SELECT supplier_name,
DECODE(supplier_id, 10000, 'IBM',
                    10001, 'Microsoft',
                    10002, 'Hewlett Packard',
                    'Gateway') result
FROM suppliers;

La declaración DECODE anterior es equivalente a la siguiente declaración IF-THEN-ELSE:

IF supplier_id = 10000 THEN
   result := 'IBM';

ELSIF supplier_id = 10001 THEN
   result := 'Microsoft';

ELSIF supplier_id = 10002 THEN
   result := 'Hewlett Packard';

ELSE
   result := 'Gateway';

END IF;

La función DECODE comparará cada valor de ID de proveedor uno por uno.

Preguntas frecuentes

Pregunta: Uno de nuestros espectadores quería saber cómo usar la función DECODE para comparar dos fechas (es decir, date1 y date2), si date1 > date2, la función DECODE debe devolver date2. De lo contrario, la función DECODE debería devolver date1.

R: Para hacer esto, use la función DECODE de la siguiente manera:

DECODE((date1 - date2) - ABS(date1 - date2), 0, date2, date1)

Si date1 es mayor que date2, la siguiente fórmula será igual a 0:

(date1 - date2) - ABS(date1 - date2)

Consejo útil #1: Uno de nuestros espectadores sugirió combinar la función SIGN con la función DECODE de la siguiente manera:

El ejemplo de fecha anterior se puede modificar de la siguiente manera:

DECODE(SIGN(date1-date2), 1, date2, date1)

Las combinaciones de FIRMAR/DECODIFICAR también ayudan con las comparaciones de números, como las bonificaciones de ventas.

DECODE(SIGN(actual-target), -1, 'NO Bonus for you', 0,'Just made it', 1, 'Congrats, you are a winner')

Consejo útil #2: Uno de nuestros espectadores sugirió usar la función MENOS (en lugar de la función DECODE) así:

El ejemplo de fecha anterior se puede modificar de la siguiente manera:

LEAST(date1, date2)

Pregunta: Me gustaría saber si es posible utilizar la función DECODE para un rango de números, es decir, 1-10 = ‘categoría 1’, 11-20 = ‘categoría 2’, sin tener que decodificar cada número individualmente.

Respuesta: Desafortunadamente, no puede usar la función DECODE en rangos numéricos. Sin embargo, puede intentar crear una fórmula que calcule un número en un rango dado, otro número en el siguiente rango, y así sucesivamente.

Por ejemplo:

SELECT supplier_id,
DECODE(TRUNC ((supplier_id - 1) / 10), 0, 'category 1',
                                       1, 'category 2',
                                       2, 'category 3',
                                       'unknown') result
FROM suppliers;

En este ejemplo, basado en la fórmula:

TRUNC ((supplier_id - 1) / 10

Si id_proveedor está entre 1 y 10, la fórmula se evaluará como 0.
Si id_proveedor está entre 11 y 20, la fórmula se evaluará como 1.
Si id_proveedor está entre 21 y 30, la fórmula se evaluará como 2.

etc…

Problema: necesito escribir una declaración DECODE que devolverá lo siguiente:

Devuelve 0,04 si yrs_of_service < 1
Devuelve 0,04 si yrs_of_service >= 1 y < 5
Devuelve 0,06 si yrs_of_service > 5

¿Cómo puedo hacer esto?

R: Deberá crear una fórmula que calcule un número para cada uno de sus rangos.

Por ejemplo:

SELECT emp_name,
DECODE(TRUNC (( yrs_of_service + 3) / 4), 0, 0.04,
                                          1, 0.04,
                                          0.06) as perc_value
FROM employees;

Pregunta: ¿Existe un límite para la cantidad de parámetros en una instrucción DECODE? Me sale el error “ORA-00939: demasiados argumentos para funcionar”.

Respuesta: Sí, puede haber hasta 255 componentes en la función DECODE. Esto incluye parámetros de expresión, búsqueda y resultado.

(Visited 8 times, 1 visits today)