PL/SQL. Un ejercicio práctico

Con el objetivo de repasar lo expuesto en posts anteriores vamos a proponer algunos ejercicios prácticos e iremos desarrollándolos hasta encontrar una posible solución. Como siempre, cualquier comentario o sugerencia de vosotros será bienvenida para así compartir el mayor conocimiento posible entre todos. ¡Comencemos!.

Escenario:
En la base de datos COMPANY, necesitamos identificar los empleados más ociosos, para trasladarlos a otras divisiones. Crear un procedimiento PL/SQL que obtenga uno a uno dichos empleados, de forma que ejecutando "n" veces el procedimiento obtengamos el resultado esperado.



Esta solución parece resolver el problema. Pero ¡ojo!, sólo porque nos pedían poder hacerlo "uno a uno", lo cual nos permite usar un SELECT-INTO directamente, y un ROWNUM, de forma que siempre nos aseguramos que exista un registro, y solo un registro, no más. Si no hay datos se elevaría una excepción y caso de haber más de un registro también (TOO_MANY_ROWS). Más adelante veremos que con cursores no tenemos porqué preocuparnos del número de registros que se devuelvan.




Cláusula BEGIN en PL/SQL

El propósito de la cláusula BEGIN es indicar dónde ha acabado la parte de declaración de variables y donde empieza el código que debe ser procesado. En esta cláusula podemos incluir:

- Sentencias para manipular datos (variables, constantes, etc)
- Sentencias para acceder a Bases de Datos mediante SQL (select, update, etc)
- Lógica de control e instrucciones para gestionar el flujo, al igual que en otros lenguajes

Ya hemos visto en el anterior post, Cláusula DECLARE en PL/SQL, el formato más habitual para asignar valores a variables: usando el operador de asignación (:=). Otro operador que nos será muy útil con las variables de tipo CHAR o VARCHAR2, es el de concatenación (||), fácilmente asociable al de lenguaje SQL. Recordemos que para poder usar las comillas simples (') como parte de cadenas, y no se asocien a delimitadores, debemos declarar la cadena con el formato q'!cadena!'.

Con variables numéricas obviamente podremos usar los operadores aritméticos (+, -, *, /), mientras que por ejemplo con variables tipo Date podemos también podemos directamente sumar o restar un número de días enteros. Respecto a la lógica de control de sentencias tenemos los condicionales IF, que combinados con variables de tipo Boolean nos permitirán controlar qué debe correr en cada momento. Además, como PL/SQL es un lenguaje 100% integrado en la Base de Datos Oracle, estructuras que usamos habitualmente en SQL también podemos hacerlo en instrucciones PL/SQL. Un ejemplo de ésto son los operadores de comparación (=, !=, IS NULL, LIKE, IN, BETWEEN). Veamos un ejemplo con todo lo expuesto hasta ahora:



El lenguaje SQL de Oracle tiene infinidad de funciones para poder modificar datos de columnas. Las mismas funciones prácticamente podemos usarlas en PL/SQL, incluidas las expresiones regulares. Éste podría ser un buen ejemplo para conocer parte de la potencia del lenguaje:





Buscar en el Blog: