La función DECODE compara expr con cada uno de valores de busqueda uno a uno. Si expr es igual a un valor de busqueda la base de datos Oracle devuelve el resultado correspondiente.
Sintaxis
DECODE(expr, busqueda, resultado [, busqueda, resultado ]...· [, defecto ])
Si no hay coincidencias en busqueda Oracle devuelve el valor por defecto. Si el valor por defecto se omite, Oracle devuelve un valor null. Los argumentos pueden ser cualquiera de los tipos de datos numéricos (NUMBER, BINARY_FLOAT, or BINARY_DOUBLE) o tipos de datos de caracteres.
La función DECODE() se puede utilizar tanto en Oracle 10g como en Oracle 11g.
Si expr y busqueda son datos de tipo caracter, Oracle los compara semánticamente sin rellenar. expr, busqueda y resultado puede ser cualquiera de los tipos de datos CHAR, VARCHAR2, NCHAR o NVARCHAR2. La cadena devuelta es de tipo de dato VARCHAR2 y se encuentra en el mismo juego de caracteres del parámetro del primer resultado.
Si el primer par de busqueda-resultado es numérico, entonces Oracle compara todas las expresiones busqueda-resultado y la primera expr determina el argumento con la mayor prioridad numérica, convierte implícitamente el resto de argumentos ese tipo de datos, y devuelve ese tipo de datos.
La busqueda, resultado, y defecto pueden ser derivados desde una expresión. La base de datos Oracle utiliza la evaluación de cortocircuito. La base de datos evalúa cada valor de busqueda sólo antes de comparar con expr, en lugar de evaluar todos los valores de busqueda antes de comparar cualquiera de ellos con expr, entonces, Oracle nunca evalúa una busqueda si una busqueda anterior es igual a expr.
Oracle convierte automáticamente expr y cada valor de busqueda a el valor del tipo de datos de primera busqueda antes de comparar. Oracle convierte automáticamente el valor de retorno al mismo tipo de datos del primer resultado. Si el primer resultado tiene el tipo de dato CHAR o si el primer resultado es nulo, Oracle convierte el valor de retorno al tipo de datos VARCHAR2.
En una función DECODE, Oracle considera que dos nulls son equivalentes. Si expr es null, Oracle devuelve el resultado de la primera busqueda que es también null. El número máximo de componentes en la función DECODE, incluyendo expr, busqueda, resultado y defecto, es de 255.
EJEMPLO:
SELECT Numfactura,
DECODE (CodPais,
1, 'ECUADOR',
2, 'VENEZUELA',
3, 'ARGENTINA',
4, 'ESPAÑA',
5, 'PORTUGAL',
6, 'MEXICO',
'Desconocido') "Pais", Importe
FROM Facturas
WHERE Importe > 100
ORDER BY "Pais", NumFactura;
numfac Pais Importe
---------- -------------------------------- ----------
3 ARGENTINA 239
10 ARGENTINA 216
14 Desconocido 1235
1 ECUADOR 610
8 ECUADOR 1626
4 ESPAÑA 2257
11 ESPAÑA 2806
6 MEXICO 101
14 MEXICO 141
5 PORTUGAL 156
13 PORTUGAL 96
11 rows selected.