Oracle SQL - Función DECODE()
Búsqueda personalizada

Oracle SQL - Función DECODE()





Sintaxis.bases_datos_ora_11g

DECODE(expr, busqueda, resultado [, busqueda, resultado ]...· [, defecto ])

 

Proposito.

 

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.

 

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, busquedaresultado 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.