Sepa Dónde y Cómo usar el CASE en los Packages en Oracle

Saber dónde y cómo usar el estamento CASE  de Oracle te permitirá solucionar muchos problemas que se presenten al momento de construir los Procedures en Oracle  y Function en Oracle, también te permitirá escribir menos código fuente ya que puedes evitar ocupar más variables. El CASE  se parece mucho a la función DECODE, pero la primera es mucho mas flexible que la segunda ya que puede ser usada en cualquier parte del código, a diferencia del DECODE que solo se puede usar dentro de los comandos SQL (Select, Insert, Update, Delete, etc.).

El CASE   es una de las muchas herramientas que trae Oracle que te facilitan el desarrollo de procesos, te permite decodificar un valor para que devuelva o retorne otro valor, es decir, es como usar la cláusula IF o la función DECODE  donde se puede preguntar si un dato es igual a algo y realizar una acción como retornar o asignar un valor.

Al principio te costará un poco aprender a usar el CASE  ya que tiene una sintaxis muy particular, personalmente me costó acostumbrarme a usarla, pero una vez que entiendes como funciona vas a querer usarla en todo lo que hagas y su sintaxis te será natural. Revisemos algunos ejemplos prácticos para entender mejor cuando se debe usar el CASE:

Ejemplo #1: Supongamos que en nuestra tabla T_Empleados tenemos el campo Estado_Civil que puede contener los valores 1, 2, 3 y 4, donde 1 es Soltero, 2 es Casado, 3 es Separado y 4 es Viudo. Se requiere que cuando se consulten los empleados de un departamento se muestre el nombre del Estado Civil, veamos cómo se hace.

/* Packages en Oracle */

Select  Emp.Rut, Emp.Nombre, Emp.Direccion, Case   Emp.Estado_Civil When  1 Then  ’Soltero’ When 2 Then ’Casado’ When 3 Then ’Separado’ When 4 Then ’Viudo’ Else  ’No definido’ End Case, Nombre_Estado_Civil From T_Empleados Emp Where Emp.Id_Departamento = p_Id_Departamento;

En este ejemplo usamos el CASE  para decodificar el campo Estado_Civil de la tabla T_Empleados y obtener el nombre del estado civil, si se fijan el CASE usa como primer dato el valor del campo a validar, en este caso Emp.Estado_Civil, luego en cada WHEN se pregunta por el valor posible que puede llegar y el THEN devuelve el valor que corresponde, entonces el CASE   pregunta si el valor del campo Emp.Estado_Civil es 1 entonces devuelve el valor ‘Soltero’, si viene un valor que no se encuentra el Case retorna ‘No Definido’.

TÚ REPORTE: “Cómo Construir un SELECT Eficiente en ORACLE en Solo 7 Pasos”  ¡ Haz Click Aquí y Descárgalo GRATIS Ahora !

Ejemplo #2: Ahora supongamos que debemos obtener una dato para enviarlo como parámetro a un proceso, primero usaremos un IF y luego un CASE   para ver la diferencia.

/* Procedures en Oracle */

lst_Tipo               Varchar2(1):= ‘ ‘;

Begin

If pin_Edad <= 25 Then

lst_Tipo:= ‘A’;

Elsif pin_Edad > 25 and pin_Edad <= 35 Then

lst_Tipo:= ‘B’;

Elsif pin_Edad > 35 Then

lst_Tipo:= ‘C’;

End if;

Prc_Validar_Empleado(pin_Rut, lst_Tipo);

End;

En este ejemplo usamos la variable lst_Tipo y la cláusula IF para determinar el valor de un parámetro para enviar al proceso Prc_Validar_Empleado. Ahora el mismo ejemplo pero usando el CASE:

/* Function en Oracle */

Begin

Prc_Validar_Empleado(        pin_Rut,

Case

When pin_Edad <= 25 Then ‘A’

When  pin_Edad > 25 and pin_Edad <= 35 Then ‘B’

When pin_Edad > 35 Then ‘C’

End Case);

End;

En este ejemplo no necesitamos usar una variable, ojo que además el CASE  se esta usando dentro de la llamada al proceso, a eso me refiero a que el CASE  es mas flexible y se puede usar en cualquier lugar del código fuente, se ahorra memoria y la cantidad de líneas que se deben codificar.

No dudes en dejarme tu pregunta o comentario sobre este artículo, ya que estaré muy atento para resolver todas las dudas que tengas al respecto. Puedes contarme además que tema te interesa saber sobre Packages en Oracle o cuál es tu principal frustración a la hora de construir Procedures en Oracle y/o Function en Oracle, gracias.

Saludos

Roberto Vicencio – Escritor del Reporte:

Cómo Construir un SELECT Eficiente en ORACLE en 7 Pasos

Esta entrada fue publicada en Function en Oracle, Packages en Oracle, Procedures en Oracle y etiquetada , , , , , . Guarda el enlace permanente.

2 respuestas a Sepa Dónde y Cómo usar el CASE en los Packages en Oracle

  1. Enrique dijo:

    Hola, estoy evaluando un objeto Function y encuentro que estan utilizando la funcion CASE en una parte del Where de una sentencia, ¿es recomendable esta practica?

    Select R.IMP_SOLES
    From MOVIMIENTOS R
    Where (CASE WHEN (SELECT COUNT(1)
    FROM PARAMETRO
    WHERE CORTA = COD_CLI
    AND TIPO = ‘PAR_CLI_EX’
    AND INDICADOR = ‘S’) > 0
    THEN 1
    ELSE (SELECT 1
    FROM CLIENTE
    WHERE C0902 = TO_NUMBER(R.COD_CLI)
    AND C1031 = ‘PN’) END ) = 1

    • Hola Enrique, gracias por comunicarte y por tu comentario, el Case se puede usar en el Where o Select, pero se recomienda que se use de forma eficiente sin abusar, es decir, si estas usando un select a otra tabla esta no debe afectar el tiempo de respuesta de la consulta, en el ejemplo se hace una consulta a la tabla parametro que debe ser una tabla pequeña pero también se consulta la tabla cliente que es mucho mas grande y puede afectar el rendimiento, otra forma de hacer la consulta es usar un Join entre las tablas por el campo Cod_Cli, gracias.

      PD: Si te han gustado los artículos recomienda este enlace http://dominatuspackagesenoracle.com/blog/ a tus amigos o personas que también les pueda interesar esta información.

      Saludos
      Roberto Vicencio – Para Tu Éxito con Oracle.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s