Carlos A. García

Decode Oracle

Autor: Carlos A. García. Archivado en Oracle
Etiquetas: · · ·
12/Ago/2008  

¿Cómo funciona un DECODE en Oracle? La verdad es que es sencillo de utilizar, pero no de explicar. Vamos a ver si lo consigo…

DECODE es una función que acepta cuatro parámetros, dos de los cuales pueden tener más de una ocurrencia y uno es opcional (por defecto será NULL). Para entender como funciona, dejadme que lo explique como si fuera un IF … ELSIF … ELSE … END IF.

Imaginemos que tenemos una variable que se llama v_nombre que guarda el nombre de un país. Queremos devolver la nacionalidad en función de dicho país. Si nos planteamos una condición del tipo:

 if v_nombre = 'ESPAÑA' then
   return 'Español';
 elsif v_nombre='ALEMANIA' then
   return 'Alemán';
 elsif v_nombre='FRANCIA' then
   return 'Francés';
 else
   return 'Otra nacionalidad';
 end if;

Con un DECODE lo sintetizaríamos de la siguiente forma:
1. El primer parámetro será la condición a evaluar. En nuestro caso, v_nombre
2. El segundo parámetro será la posibilidad que puede cumplir el primer parámetro. En el ejemplo anterior, ‘ESPAÑA’
3. El tercer parámetro será el valor a retornar en caso de que se cumpla el parámetro anterior. En este caso, ‘Español’
Los parámetros 2 y 3 se pueden repetir tantas veces como sea necesario. Para decirlo de una forma clara y a lo bruto, tantas veces como condiciones IF…ELSIF tengamos. De la misma forma que hay una dupla (‘ESPAÑA’, ‘Español’) habrá otra (‘ALEMANIA’, ‘Alemán’) y otra (‘FRANCIA’, ‘Francés’)
4. El cuarto parámetro es el valor por defecto. En este caso, ‘Otra nacionalidad’. Si no especificamos ningún valor, cuando no se cumpla ninguna de las condiciones anteriores, obtendremos un NULL.
Y ahora al lío … cómo utilizar el DECODE realmente:

 select DECODE (v_nombre,
   'ESPAÑA', 'Español',
   'ALEMANIA', 'Alemán',
   'FRANCIA', 'Francés',
    'Otra nacionalidad'
) from dual;

Evidentemente, se puede utilizar el DECODE directamente sobre la tabla (por ejemplo, nombre de tabla PAÍS, nombre de campo NOMBRE):

 select DECODE (nombre,
   'ESPAÑA', 'Español',
   'ALEMANIA', 'Alemán',
   'FRANCIA', 'Francés',
    'Otra nacionalidad'
) from país;

Como limitaciones, recordar que DECODE

1. No se puede utilizar en PLSQL, sino sólo en SQL. No de puede hacer un

 v_variable := DECODE ( ... );

2. Los tipos de datos que podemos utilizar son numéricos o de caracteres.

En fin, creo que no me dejo nada. El próximo día prometo explicar porque, según mi criterio, nunca hay que utilizar un DECODE.





Artículos relacionados



 Suscríbete a los comentarios de este post.  Comentarios

Dejar comentario

  1. ¿Por qué no utilizar la función DECODE? » Innova Desarrollos informáticos dice:
    18 de Agosto de 2008 a las 9:02

    [...] Archivado en Oracle 18/Ago/2008 Hace unos días intenté explicar como utilizar la función DECODE en Oracle. Es una de las funciones de SQL más utilizadas, pero en muy pocos casos está [...]

  2. MAgnus dice:
    08 de Abril de 2009 a las 22:53

    gracias tio didactica y buena la explicacion…. :)

  3. car dice:
    09 de Marzo de 2010 a las 11:45

    buena :-)

  4. Carlos A. García dice:
    09 de Marzo de 2010 a las 12:56

    GRACIAS !!!!

  5. braulio dice:
    13 de Abril de 2010 a las 0:31

    <nitido men… ya entendi como es el asunto :D

  6. Carlos A. García dice:
    14 de Abril de 2010 a las 9:17

    Ok. Gracias por el apoyo, Braulio
    Un saludo


Deja tu comentario








* Campos obligatorios  




6 comentarios »