Este tema resulta de gran importancia para cualquier administrador de bases de datos, debido a que, en PL/SQL, los cursores se usan para el procesamiento de los resultados que se obtienen a través de una consulta, así como también para administrar los registros de una tabla de manera individual. Por su parte, las excepciones también son de gran utilidad para la gestión exitosa de una base de datos, ya que permiten que, a través de un programa, se puedan detectar y procesar los errores que ocurren durante la ejecución de un programa, ayudando de manera directa en la integridad de los datos y en lograr una continuidad óptima de los procesos que se estén ejecutando.
En este tema, aprenderás cómo hacer uso correcto de los cursores y las excepciones en PL/SQL para lograr un adecuado procesamiento de los datos y sabrás manejar las excepciones con el fin de contar con una detección exitosa de errores y poder ejecutar acciones que apoyen en su resolución. Así, desarrollarás soluciones robustas y escalables que permitan a los usuarios contar con información veraz y oportuna para la toma de decisiones.
Usando un cursor implícito para leer/escribir información en tablas
En PL/SQL, un cursor es una herramienta utilizada para manejar resultados de una consulta, en una o varias tablas de una base de datos. Básicamente, un cursor es una estructura de control que permite recorrer una tabla, fila por fila, para realizar operaciones con los datos que se van obteniendo (Programación PL/SQL, 2021).
Principalmente, los cursores se utilizan para hacer operaciones complejas que no se pueden llevar a cabo con una única sentencia SQL, o bien, cuando se ejecutan operaciones en los resultados de la consulta, como filtrar datos, realizar cálculos, etc. En resumen, estos recursos permiten realizar operaciones más complejas y específicas sobre los resultados de una consulta en una base de datos.
Según Herrera (2022), en PL/SQL, un cursor implícito se crea automáticamente por el sistema para procesar resultados de una sentencia SQL. Este tipo resulta muy útil para consultas sencillas que devuelven un conjunto de resultados, ya que no es necesario declararlo explícitamente.
Para crear un cursor implícito en PL/SQL, se requiere la cláusula FOR en una sentencia SQL; por ejemplo, si quieres leer y escribir información en la tabla “Employee”, usa esta sentencia:
Esta pantalla se obtuvo directamente del software que se está explicando en la computadora, para fines educativos.
En este caso, el cursor employee_rec se crea automáticamente al utilizar la cláusula FOR con la sentencia SELECT. El cursor itera a través de todas las filas de la tabla “Employee”; además, se puede utilizar para leer y escribir información en cada una de ellas. Dentro del bucle LOOP, se incluye el código necesario para procesar la información de cada fila. Es importante tener en cuenta que los cursores implícitos solo pueden usarse para procesar resultados de una única sentencia SQL.
Imagina que tienes una tabla llamada "Productos", con las siguientes columnas: “id”, “nombre”, “cantidad”, “precio_unitario” y “precio_total”. El siguiente código crea un cursor implícito que recorre la tabla, actualiza el precio total para cada producto y muestra los registros actualizados:
Esta pantalla se obtuvo directamente del software que se está explicando en la computadora, para fines educativos.
En este ejemplo, se utiliza un cursor implícito en un bucle FOR para recorrer la tabla de productos. Para cada registro en el cursor, se actualiza el precio total, multiplicando la cantidad por el precio unitario y añadiendo el resultado en la tabla. Luego, se muestra un mensaje con el nombre del producto y su nuevo precio total.
Este solo es un ejemplo simple de cómo usar un cursor implícito para leer y escribir datos en una tabla en SQL. El uso de cursores y excepciones puede ser más complejo y variar según las necesidades del proyecto.
Usando un cursor para leer/escribir información en tablas
Para utilizar un cursor en SQL, que permita leer y escribir información en una tabla, se deben seguir los siguientes pasos:
Esta pantalla se obtuvo directamente del software que se está explicando en la computadora, para fines educativos.
Esta pantalla se obtuvo directamente del software que se está explicando en la computadora, para fines educativos.
Esta pantalla se obtuvo directamente del software que se está explicando en la computadora, para fines educativos.
Esta pantalla se obtuvo directamente del software que se está explicando en la computadora, para fines educativos.
El uso de cursores genera un impacto en el rendimiento de la base de datos, especialmente en consultas que devuelven grandes cantidades de información; por tanto, se recomienda utilizarlos con precaución y recurrir a soluciones más eficientes cuando sea posible (Herrera, 2022).
Por ejemplo, imagina que tienes una tabla llamada "Ventas", con las columnas "id_venta", "fecha", "producto" y "cantidad". En este caso, quieres leer los registros almacenados y actualizar la columna "cantidad", multiplicando cada dato por 1.1; luego, deseas que los registros se muestren ya actualizados.
Primero, crea el cursor explícito:
Esta pantalla se obtuvo directamente del software que se está explicando en la computadora, para fines educativos.
Luego, en el bloque del cursor, utiliza la sentencia FOR UPDATE para bloquear las filas que se actualizarán durante esta acción:
Esta pantalla se obtuvo directamente del software que se está explicando en la computadora, para fines educativos.
Finalmente, muestra los registros actualizados utilizando una sentencia SELECT:
Esta pantalla se obtuvo directamente del software que se está explicando en la computadora, para fines educativos.
Este es solo un ejemplo sencillo de cómo se puede utilizar un cursor explícito en SQL para leer y escribir información en una tabla. Cabe señalar que debes ser precavido con los cursores, ya que pueden afectar el rendimiento de la base de datos si se emplean de manera inadecuada.
Manejo de excepciones para manejo de errores en la programación
El manejo de excepciones en la programación de SQL es una técnica utilizada para controlar y procesar errores que puedan ocurrir durante la ejecución de un programa (IBM, 2021). Una excepción es un evento inesperado que interrumpe la ejecución normal del programa; por ejemplo, una división entre cero, una violación de la integridad de la base de datos o un error de sintaxis.
El manejo de excepciones permite a los desarrolladores gestionar estos errores de forma controlada, así como definir una serie de acciones a seguir cuando se presentan dichas situaciones. Esto puede incluir registrar el error en un archivo, enviar una notificación al administrador del sistema o ejecutar una serie de instrucciones para revertir cualquier acción que haya causado el problema. El manejo de excepciones mejora la confiabilidad y robustez de las aplicaciones, pues evita que los errores provoquen fallos catastróficos en el sistema.
En SQL, el manejo de excepciones se logra mediante el uso de bloques try-catch. En un bloque try, se ingresa el código que puede generar una excepción; por su parte, en uno catch, se especifica el comportamiento que debe tener el programa en caso de que se produzca una excepción. Por ejemplo, se puede determinar que se muestre un mensaje de error al usuario, que se grabe un registro del evento en una tabla o que se intente ejecutar una acción alternativa para solucionar el problema.
A continuación, se presenta un ejemplo de un bloque try-catch, que maneja una excepción de división por cero:
Esta pantalla se obtuvo directamente del software que se está explicando en la computadora, para fines educativos.
En este ejemplo, se intenta realizar una división entre cero, acción que provoca un error; sin embargo, gracias al bloque try-catch, el programa maneja la excepción de manera controlada y muestra un mensaje de error al usuario, en lugar de detenerse abruptamente.
Cabe destacar que, en SQL, existen varias excepciones predefinidas que se pueden administrar gracias a manejo de excepciones. Algunas de las más comunes son estas:
Esta pantalla se obtuvo directamente del software que se está explicando en la computadora, para fines educativos.
En este ejemplo, se busca el nombre del producto con un id de 100; si no se encuentra ningún resultado con dicha característica, se lanza la excepción NO_DATA_FOUND y se muestra un mensaje en la consola.
Esta pantalla se obtuvo directamente del software que se está explicando en la computadora, para fines educativos.
En este ejemplo, se busca el nombre de un producto en la categoría 1; si se encuentra más de un resultado, se lanza la excepción TOO_MANY_ROWS y se muestra un mensaje en la consola.
Esta pantalla se obtuvo directamente del software que se está explicando en la computadora, para fines educativos.
En este ejemplo, el valor “v_precio” inicia con el valor 'abc', en vez de hacerlo con un número válido. Al intentar realizar la inserción de datos en la tabla “Productos”, se genera la excepción INVALID_NUMBER, ya que se quiere insertar un valor no numérico en la columna “precio”. En el bloque EXCEPTION, se utiliza la instrucción DBMS_OUTPUT.PUT_LINE para imprimir un mensaje de error en la consola de SQL Developer. De esta manera, se maneja la excepción, se captura y se muestra un mensaje de error.
Esta pantalla se obtuvo directamente del software que se está explicando en la computadora, para fines educativos.
En este ejemplo, se quiere insertar un nuevo cliente con un id de 100, pero como ya existe uno con esa identificación, se lanza la excepción DUP_VAL_ON_INDEX y se muestra un mensaje en la consola.
Esta pantalla se obtuvo directamente del software que se está explicando en la computadora, para fines educativos.
En este ejemplo, se manejan dos excepciones: NO_DATA_FOUND (si no se encuentra ningún producto con el id 100) y OTHERS (para cualquier otro tipo de error). Si se presenta un error diferente al primero, se muestra un mensaje en la consola.
Cabe señalar que se pueden manejar excepciones en combinación con cursores de SQL. De hecho, esto se hace con mucha frecuencia, ya que permite manejar situaciones inesperadas o errores que puedan ocurrir durante la iteración de los resultados del cursor.
Por ejemplo, en un cursor que recorre una tabla y realiza ciertas operaciones en cada fila, se pueden utilizar excepciones para manejar errores como la división por cero, la violación de una restricción de clave foránea, entre otros. En estos casos, el empleo de excepciones ayuda a que el programa maneje estos errores de forma controlada y natural, sin detenerse abruptamente o comprometiendo la integridad de los datos.
Accede al archivo del código del tema, aquí.
Conocer la manera correcta de manejar cursores apoya el procesamiento de consultas que impliquen grandes volúmenes de datos y, además, con el manejo correcto de las excepciones, no solamente lograrás encontrar errores fácilmente, sino que también podrás optimizar los procesos de tal forma que puedas garantizar en todo momento el uso de los recursos disponibles.
La escritura de códigos más eficientes y seguros es una habilidad que todo administrador de bases de datos debe dominar para mejorar el rendimiento en general. Entender el funcionamiento de estos elementos permite crear un código menos complejo y más útil que ayude a garantizar una mayor estabilidad y escalabilidad de las aplicaciones.
Asegúrate de:
Tecmilenio no guarda relación alguna con las marcas mencionadas como ejemplo. Las marcas son propiedad de sus titulares conforme a la legislación aplicable, estas se utilizan con fines académicos y didácticos, por lo que no existen fines de lucro, relación publicitaria o de patrocinio.
Los siguientes enlaces son externos a la Universidad Tecmilenio, al acceder a ellos considera que debes apegarte a sus términos y condiciones.
Lecturas
Videos
Para conocer más acerca de cursores en MySQL, te sugerimos revisar lo siguiente:
Tecmilenio no guarda relación alguna con las marcas mencionadas como ejemplo. Las marcas son propiedad de sus titulares conforme a la legislación aplicable, estas se utilizan con fines académicos y didácticos, por lo que no existen fines de lucro, relación publicitaria o de patrocinio.
La obra presentada es propiedad de ENSEÑANZA E INVESTIGACIÓN SUPERIOR A.C. (UNIVERSIDAD TECMILENIO), protegida por la Ley Federal de Derecho de Autor; la alteración o deformación de una obra, así como su reproducción, exhibición o ejecución pública sin el consentimiento de su autor y titular de los derechos correspondientes es constitutivo de un delito tipificado en la Ley Federal de Derechos de Autor, así como en las Leyes Internacionales de Derecho de Autor.
El uso de imágenes, fragmentos de videos, fragmentos de eventos culturales, programas y demás material que sea objeto de protección de los derechos de autor, es exclusivamente para fines educativos e informativos, y cualquier uso distinto como el lucro, reproducción, edición o modificación, será perseguido y sancionado por UNIVERSIDAD TECMILENIO.
Queda prohibido copiar, reproducir, distribuir, publicar, transmitir, difundir, o en cualquier modo explotar cualquier parte de esta obra sin la autorización previa por escrito de UNIVERSIDAD TECMILENIO. Sin embargo, usted podrá bajar material a su computadora personal para uso exclusivamente personal o educacional y no comercial limitado a una copia por página. No se podrá remover o alterar de la copia ninguna leyenda de Derechos de Autor o la que manifieste la autoría del material.