Introducción a la declaración de caso en PL / SQL

La declaración CASE en PL / SQL es similar a la condición IF-ELSEIF donde se enumeran diferentes condiciones dentro de un bloque y solo se ejecutan esas declaraciones para las cuales cumple la condición. La declaración CASE coincide con el valor de la expresión en lugar de una expresión booleana. La expresión podría ser de cualquier tipo de datos y el mismo tipo de datos debe usarse en las declaraciones. Cada declaración tiene un valor predefinido y si ese valor coincide con los valores pasados ​​en la expresión del selector, esa declaración particular se ejecuta. En este tema, vamos a aprender sobre la declaración CASE en PL / SQL.

Sintaxis

Ahora que tiene una idea general de lo que es una declaración CASE en PL / SQL, echemos un vistazo a la sintaxis de la declaración CASE.

CASE (expression)
WHEN THEN statement_l;
WHEN THEN statement_2;
WHEN THEN statement_3;
ELSE default_statement;
END CASE;

Explicación del código

En la sintaxis anterior, la expresión devolverá un valor de cualquier tipo de datos, todas las declaraciones tendrán un valor único predefinido, la expresión CASE pasará por todas las declaraciones hasta que obtenga la coincidencia exacta definida en la expresión de valor, en este caso, Value_1, Value_2 y Value_3. Si la expresión Case no encontró la coincidencia en la instrucción, se ejecutará la instrucción predeterminada.

Tenga en cuenta que el bloque ELSE es opcional y si no desea que se ejecute ninguna instrucción predeterminada, puede omitir esta instrucción. El caso END es una parte obligatoria del caso.

Diagrama de flujo

¿Cómo funciona la declaración de caso en PL / SQL?

Aunque la declaración CASE introducida en el Oracle 9i ha sido ampliamente utilizada en otros lenguajes de programación. Al igual que otros lenguajes de programación, la declaración CASE funciona de manera similar.

Oracle 9i admite dos tipos de declaraciones CASE, declaración CASE simple y declaración CASE buscada

1. Declaración de caso simple

En la declaración de caso simple, se ejecuta una declaración si el valor de la expresión coincide con la condición establecida. Estas condiciones de declaración están predefinidas al escribir la declaración CASE. Una vez que el compilador encuentra una coincidencia, se rompe y sale del bucle después de ejecutar la declaración, evitando más evaluaciones de expresiones innecesarias. Si el compilador no encontró ninguna coincidencia, ejecutará la declaración del caso predeterminado. El caso predeterminado no es obligatorio y se puede omitir.

Sintaxis

CASE expression
WHEN condition_1 THEN
statements1
WHEN condition_2 THEN
statements2

ELSE
statements_else
END CASE;

Explicación

Como se mencionó anteriormente, el caso ELSE es opcional. El compilador primero evalúa la expresión CASE y luego compara la expresión con la primera condición. Si la condición coincide con la expresión, la instrucción 1 se ejecutará; de lo contrario, la condición 2 se verifica y así sucesivamente.

Veamos un ejemplo en tiempo real para entender el concepto más claramente.

SELECT Employee_Name,
CASE rating
WHEN 1 THEN 'Low'
WHEN 3 THEN 'High'
ELSE 'Medium' END
FROM Review;

Supongamos que hay una tabla de revisión que tiene detalles de retroalimentación de fin de año de los empleados y debe mostrar el nombre del empleado y las calificaciones. Pero en lugar de los números que desea mostrar, la calificación más baja es 1, la calificación más alta es 3, de lo contrario, es media.

La consulta escrita arriba producirá los siguientes resultados

Employee_Name CASECR

------– --

Bogart Low

Nolte Medium

Loren Medium

Gueney High

2. Declaración de CASO buscado

La declaración CASE buscada es ligeramente diferente a la declaración CASE simple. En la Declaración de caso buscado en lugar de una condición predefinida, puede escribir una condición que se evaluará en el tiempo de ejecución.

echemos un vistazo a la sintaxis de la declaración CASO buscado con este ejemplo

CASE
WHEN salary >= 10000 AND salary <=20000 THEN
AllocateBonus(employee_id, 1500);
WHEN salary > 20000 AND salary <= 40000 THEN
AllocateBonus(employee_id, 1000);
WHEN salary > 40000 THEN
AllocateBonus(employee_id, 500);
WHEN salary > 60000 THEN
AllocateBonus(employee_id, 250);
ELSE
AllocateBonus(employee_id, 0);
END CASE;

Suponga que el requisito es asignar bonos a un empleado en función de su rango de salario actual. Si un empleado cumple con ciertos criterios, debe llamarse a la función AllocateBonus, que toma employee_id y la cantidad de bonificación como parámetros.

En el ejemplo anterior, hemos definido diferentes rangos de salario y en función de esa función AllocateBonus se llamará si el salario cae dentro del rango especificado.

Nota : En cada iteración, se ejecutará una y solo una declaración a pesar de que varias declaraciones satisfacen los criterios. Cuando las cláusulas siempre se evalúan en orden de arriba a abajo.

Consejos

Dado que la cláusula WHEN se evalúa en un cierto orden, es decir, de arriba a abajo, se recomienda enumerar las cláusulas que tienen más probabilidades de ocurrir primero o la frecuencia es mayor. Además de la de cualquier cláusula WHEN, es una expresión costosa, es decir, que requiere una gran cantidad de memoria de la CPU al final para minimizar las posibilidades de ejecución.

3. Declaración de CASO anidada

Al igual que la instrucción IF-ELSE anidada, la instrucción CASE también se puede anidar. La sintaxis sigue siendo la misma solo que cuando la condición externa satisface los criterios, nuevamente pasa por una serie de declaraciones. Improvisemos el ejemplo CASE buscado anteriormente para comprender cómo funciona la instrucción CASO anidado.

CASE
WHEN salary >= 10000 THEN
CASE
WHEN salary <= 20000 THEN
AllocateBonus(employee_id, 1500);
WHEN salary > 20000 THEN
AllocateBonus(employee_id, 1000);
END CASE;
WHEN salary > 40000 THEN
AllocateBonus(employee_id, 500);
WHEN salary < 10000 THEN
give_bonus(employee_id, 0);
END CASE;

Explicación

Como puede ver, la sintaxis sigue siendo la misma solo que cuando la condición la satisface, vuelva a pasar por una declaración CASE para finalmente ejecutar la función Asignar.

Conclusión: declaración CASE en PL / SQL

Ahora que hemos llegado al final del artículo, resumamos los puntos clave que hemos discutido en este artículo. Hemos visto qué es una declaración CASE en PL / SQL, aprendimos la sintaxis básica con un ejemplo. Hemos discutido los diferentes tipos de sentencias CASE, es decir, CASE simple, CASO buscado y la sentencia CASE anidada con un ejemplo. También hemos aprendido cómo podemos optimizar la declaración CASE mediante el ordenamiento correcto de la cláusula WHEN.

Artículos recomendados

Esta es una guía para la declaración CASE en PL / SQL. Aquí discutimos cómo funciona la declaración de caso en PL / SQL con los ejemplos y la sintaxis. También puede echar un vistazo a los siguientes artículos para obtener más información:

  1. ¿Qué es PL / SQL?
  2. Comandos PL / SQL
  3. Usos de SQL
  4. Carreras en PL / SQL
  5. Declaración IF-Else en Matlab
  6. Bucles en PL / SQL