¿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
-
¿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á [...]
-
MAgnus dice:
08 de Abril de 2009 a las 22:53gracias tio didactica y buena la explicacion….
-
car dice:
09 de Marzo de 2010 a las 11:45buena
-
Carlos A. García dice:
09 de Marzo de 2010 a las 12:56GRACIAS !!!!
-
braulio dice:
13 de Abril de 2010 a las 0:31<nitido men… ya entendi como es el asunto
-
Carlos A. García dice:
14 de Abril de 2010 a las 9:17Ok. Gracias por el apoyo, Braulio
Un saludo







Suscribirse a nuestro Twitter
Javier Jofre (12-May-2010)
Gracias a O'Reilly, podemos asistir vía online y de forma gratuita a algunos cursos sobre desarrollo en Java para Android. Próximamente (en unos días) empieza el curso de creación de un cliente twitter. Espero que lo disfrutéis.