Se muestra el codigo de un gestor de ventas
La función add_cliente se encarga de añadir un nuevo cliente a la tabla Clientes en la base de datos. Recibe cuatro parámetros de entrada: p_nombre, p_apellido, p_num_tel, y p_direccion, que representan el nombre, apellido, número de teléfono y dirección del cliente, respectivamente. La función retorna un mensaje indicando si el cliente se añadió correctamente o si hubo un error.
CREATE OR REPLACE FUNCTION add_cliente(
p_nombre IN VARCHAR2,
p_apellido IN VARCHAR2,
p_num_tel IN VARCHAR2,
p_direccion IN VARCHAR2
) RETURN VARCHAR2 IS
BEGIN
-- Inserta un nuevo cliente en la tabla Clientes.
INSERT INTO Clientes (Nombre, Apellido, Num_tel, Dirección)
VALUES (p_nombre, p_apellido, p_num_tel, p_direccion);
RETURN 'Cliente añadido correctamente';
EXCEPTION
-- Manejo de errores: captura cualquier excepción y retorna un mensaje de error.
WHEN OTHERS THEN
RETURN 'Error al añadir cliente: ' || SQLERRM;
END add_cliente;
/-
Declaración de la Función:
CREATE OR REPLACE FUNCTION add_cliente( p_nombre IN VARCHAR2, p_apellido IN VARCHAR2, p_num_tel IN VARCHAR2, p_direccion IN VARCHAR2 ) RETURN VARCHAR2 IS
CREATE OR REPLACE FUNCTION add_cliente: Esta línea declara la función y especifica que se debe crear o reemplazar la función existente con el mismo nombre.p_nombre IN VARCHAR2: Parámetro de entrada para el nombre del cliente, de tipoVARCHAR2.p_apellido IN VARCHAR2: Parámetro de entrada para el apellido del cliente, de tipoVARCHAR2.p_num_tel IN VARCHAR2: Parámetro de entrada para el número de teléfono del cliente, de tipoVARCHAR2.p_direccion IN VARCHAR2: Parámetro de entrada para la dirección del cliente, de tipoVARCHAR2.RETURN VARCHAR2: Especifica que la función retorna un valor de tipoVARCHAR2.
-
Inicio del Bloque PL/SQL:
BEGIN- Esta palabra clave indica el inicio del bloque de código PL/SQL donde se define la lógica de la función.
-
Inserción de Datos:
INSERT INTO Clientes (Nombre, Apellido, Num_tel, Dirección) VALUES (p_nombre, p_apellido, p_num_tel, p_direccion);
INSERT INTO Clientes (Nombre, Apellido, Num_tel, Dirección): Especifica que se van a insertar datos en la tablaClientes. Los campos en los que se insertarán los valores sonNombre,Apellido,Num_tel, yDirección.VALUES (p_nombre, p_apellido, p_num_tel, p_direccion): Proporciona los valores que se van a insertar en los campos especificados. Estos valores provienen de los parámetros de entrada de la función.
-
Mensaje de Éxito:
RETURN 'Cliente añadido correctamente';- Si la inserción de datos es exitosa, esta línea retorna un mensaje indicando que el cliente se añadió correctamente.
-
Manejo de Excepciones:
EXCEPTION WHEN OTHERS THEN RETURN 'Error al añadir cliente: ' || SQLERRM;EXCEPTION: Esta palabra clave indica el inicio del bloque de manejo de excepciones.WHEN OTHERS THEN: Captura cualquier excepción que no haya sido manejada específicamente. Es una forma general de captura de errores.RETURN 'Error al añadir cliente: ' || SQLERRM: Retorna un mensaje de error que incluye el mensaje específico de la excepción capturada (SQLERRM).
-
Fin del Bloque PL/SQL:
END add_cliente;
END add_cliente: Indica el final de la funciónadd_cliente.
La función add_cliente es una manera segura y estructurada de insertar nuevos clientes en la tabla Clientes de la base de datos. Utiliza parámetros de entrada para recibir los datos del cliente y manejar las posibles excepciones que puedan ocurrir durante la operación de inserción, proporcionando mensajes claros tanto en caso de éxito como de error.
La función actualizar_precio_producto permite actualizar el precio unitario de un producto en los registros de detalle de pedidos. Recibe como parámetros el ID del producto (p_id_producto) y el nuevo precio (p_nuevo_precio) que se va a asignar. Retorna un valor booleano (TRUE si la actualización fue exitosa, FALSE si no).
CREATE OR REPLACE FUNCTION actualizar_precio_producto(
p_id_producto IN INT,
p_nuevo_precio IN DECIMAL
) RETURN BOOLEAN IS
v_resultado BOOLEAN := FALSE;
BEGIN
-- Actualiza el precio del producto en el detalle de pedidos.
UPDATE Detalle_Pedido
SET Precio_Unit = p_nuevo_precio
WHERE ID_Producto = p_id_producto;
-- Verifica si se realizó la actualización correctamente.
IF SQL%ROWCOUNT > 0 THEN
v_resultado := TRUE;
END IF;
RETURN v_resultado;
EXCEPTION
-- Manejo de errores: captura cualquier excepción y retorna FALSE.
WHEN OTHERS THEN
RETURN FALSE;
END actualizar_precio_producto;
/-
Declaración de la Función:
CREATE OR REPLACE FUNCTION actualizar_precio_producto( p_id_producto IN INT, p_nuevo_precio IN DECIMAL ) RETURN BOOLEAN IS
CREATE OR REPLACE FUNCTION actualizar_precio_producto: Define la funciónactualizar_precio_productoo la reemplaza si ya existe.p_id_producto IN INT: Parámetro de entrada que especifica el ID del producto que se desea actualizar.p_nuevo_precio IN DECIMAL: Parámetro de entrada que indica el nuevo precio que se asignará al producto, de tipoDECIMAL.
-
Variable Local:
v_resultado BOOLEAN := FALSE;
v_resultado BOOLEAN := FALSE;: Declara una variable localv_resultadode tipoBOOLEANe inicializa su valor comoFALSE. Esta variable se usará para indicar si la actualización del precio fue exitosa (TRUE) o no (FALSE).
-
Inicio del Bloque PL/SQL:
BEGIN- Inicio del bloque de código PL/SQL donde se define la lógica de la función.
-
Sentencia UPDATE:
UPDATE Detalle_Pedido SET Precio_Unit = p_nuevo_precio WHERE ID_Producto = p_id_producto;
UPDATE Detalle_Pedido: Realiza una actualización en la tablaDetalle_Pedido.SET Precio_Unit = p_nuevo_precio: Actualiza el campoPrecio_Unitcon el valor especificado enp_nuevo_precio.WHERE ID_Producto = p_id_producto;: Filtra los registros para actualizar solo aquellos donde elID_Productocoincida conp_id_producto.
-
Verificación de la Actualización:
IF SQL%ROWCOUNT > 0 THEN v_resultado := TRUE; END IF;
IF SQL%ROWCOUNT > 0 THEN: Verifica si al menos una fila fue afectada por la operación de actualización.v_resultado := TRUE;: Si se actualizaron filas, establecev_resultadoenTRUE.
-
Retorno del Resultado:
RETURN v_resultado;
RETURN v_resultado;: RetornaTRUEsi la actualización del precio del producto fue exitosa, de lo contrario, retornaFALSE.
-
Manejo de Excepciones:
EXCEPTION WHEN OTHERS THEN RETURN FALSE;EXCEPTION: Maneja cualquier excepción que pueda ocurrir durante la ejecución de la función.WHEN OTHERS THEN: Captura cualquier tipo de excepción no manejada específicamente.RETURN FALSE;: RetornaFALSEsi ocurre alguna excepción durante la actualización del precio.
-
Fin del Bloque PL/SQL:
END actualizar_precio_producto;
END actualizar_precio_producto;: Finaliza la definición de la funciónactualizar_precio_producto.
La función actualizar_precio_producto permite modificar el precio unitario de un producto en la tabla Detalle_Pedido basado en su ID. Utiliza un parámetro para especificar el nuevo precio y retorna un valor booleano que indica si la operación fue exitosa (TRUE) o no (FALSE). La función maneja posibles excepciones durante la ejecución y proporciona un mecanismo para manejar errores de manera controlada.
La función calcular_total_pedido se encarga de calcular el total de un pedido específico en base a sus detalles (productos, cantidades y precios unitarios). Recibe como parámetro el ID del pedido (p_id_pedido) y retorna el total calculado. La función suma el producto de la cantidad y el precio unitario de cada producto en el pedido para obtener el total del pedido.
CREATE OR REPLACE FUNCTION calcular_total_pedido(
p_id_pedido IN INT
) RETURN DECIMAL IS
v_total DECIMAL(10, 2);
BEGIN
-- Calcula el total sumando el producto de cantidad y precio unitario de cada detalle del pedido.
SELECT SUM(Cantidad * Precio_Unit)
INTO v_total
FROM Detalle_Pedido
WHERE ID_Pedido = p_id_pedido;
-- Retorna el total calculado.
RETURN v_total;
EXCEPTION
-- Manejo de errores: captura cualquier excepción y retorna 0.
WHEN OTHERS THEN
RETURN 0;
END calcular_total_pedido;
/-
Declaración de la Función:
CREATE OR REPLACE FUNCTION calcular_total_pedido( p_id_pedido IN INT ) RETURN DECIMAL IS
CREATE OR REPLACE FUNCTION calcular_total_pedido: Esta línea declara la función y especifica que se debe crear o reemplazar la función existente con el mismo nombre.p_id_pedido IN INT: Parámetro de entrada que representa el ID del pedido, de tipoINT.RETURN DECIMAL: Especifica que la función retorna un valor de tipoDECIMAL.
-
Declaración de Variables:
v_total DECIMAL(10, 2);
v_total DECIMAL(10, 2): Declara una variable localv_totalde tipoDECIMAL(10, 2)para almacenar el total calculado del pedido.
-
Inicio del Bloque PL/SQL:
BEGIN- Esta palabra clave indica el inicio del bloque de código PL/SQL donde se define la lógica de la función.
-
Cálculo del Total del Pedido:
SELECT SUM(Cantidad * Precio_Unit) INTO v_total FROM Detalle_Pedido WHERE ID_Pedido = p_id_pedido;
SELECT SUM(Cantidad * Precio_Unit): Realiza una suma del producto de la cantidad y el precio unitario de cada detalle del pedido.INTO v_total: Almacena el resultado de la suma en la variablev_total.FROM Detalle_Pedido: Especifica la tablaDetalle_Pedidode donde se obtienen los datos.WHERE ID_Pedido = p_id_pedido: Filtra los detalles del pedido para incluir solo aquellos cuyoID_Pedidocoincide con el valor del parámetrop_id_pedido.
-
Retorno del Total Calculado:
RETURN v_total;
- Si la consulta y el cálculo son exitosos, esta línea retorna el valor de
v_total, que es el total calculado del pedido.
- Si la consulta y el cálculo son exitosos, esta línea retorna el valor de
-
Manejo de Excepciones:
EXCEPTION WHEN OTHERS THEN RETURN 0;EXCEPTION: Esta palabra clave indica el inicio del bloque de manejo de excepciones.WHEN OTHERS THEN: Captura cualquier excepción que no haya sido manejada específicamente. Es una forma general de captura de errores.RETURN 0: Retorna 0 en caso de que ocurra alguna excepción durante la ejecución de la función.
-
Fin del Bloque PL/SQL:
END calcular_total_pedido;
END calcular_total_pedido: Indica el final de la funcióncalcular_total_pedido.
La función calcular_total_pedido permite calcular el total de un pedido específico sumando el producto de la cantidad y el precio unitario de cada producto en los detalles del pedido. La función maneja posibles excepciones y retorna 0 en caso de error, asegurando así que el sistema pueda manejar situaciones inesperadas sin interrumpir su funcionamiento.
La función obtener_historial_precios se encarga de obtener el historial de precios de un producto específico a partir de su ID. Recibe como parámetro el ID del producto (p_id_producto) y retorna un cursor que contiene todos los registros de la tabla Historial_Precios asociados a ese producto.
CREATE OR REPLACE FUNCTION obtener_historial_precios(
p_id_producto IN INT
) RETURN SYS_REFCURSOR IS
v_historial SYS_REFCURSOR;
BEGIN
-- Abre el cursor y selecciona el historial de precios del producto con el ID especificado.
OPEN v_historial FOR
SELECT ID_Historial, Precio_anterior, Precio_nuevo, Fecha_Cambio
FROM Historial_Precios
WHERE ID_Producto = p_id_producto
ORDER BY Fecha_Cambio DESC;
-- Retorna el cursor con el historial de precios.
RETURN v_historial;
EXCEPTION
-- Manejo de errores: captura cualquier excepción y cierra el cursor.
WHEN OTHERS THEN
IF v_historial%ISOPEN THEN
CLOSE v_historial;
END IF;
RETURN NULL;
END obtener_historial_precios;
/-
Declaración de la Función:
CREATE OR REPLACE FUNCTION obtener_historial_precios( p_id_producto IN INT ) RETURN SYS_REFCURSOR IS
CREATE OR REPLACE FUNCTION obtener_historial_precios: Esta línea declara la función y especifica que se debe crear o reemplazar la función existente con el mismo nombre.p_id_producto IN INT: Parámetro de entrada que representa el ID del producto, de tipoINT.RETURN SYS_REFCURSOR IS: Especifica que la función retorna un valor de tipoSYS_REFCURSOR, que es un cursor de referencia que permite devolver múltiples filas.
-
Declaración de Variables:
v_historial SYS_REFCURSOR;
v_historial SYS_REFCURSOR: Declara una variable localv_historialde tipoSYS_REFCURSORpara almacenar el cursor que contendrá el historial de precios del producto.
-
Inicio del Bloque PL/SQL:
BEGIN- Esta palabra clave indica el inicio del bloque de código PL/SQL donde se define la lógica de la función.
-
Apertura del Cursor y Selección del Historial de Precios:
OPEN v_historial FOR SELECT ID_Historial, Precio_anterior, Precio_nuevo, Fecha_Cambio FROM Historial_Precios WHERE ID_Producto = p_id_producto ORDER BY Fecha_Cambio DESC;
OPEN v_historial FOR: Abre el cursorv_historialpara la consulta especificada.SELECT ID_Historial, Precio_anterior, Precio_nuevo, Fecha_Cambio: Selecciona los camposID_Historial,Precio_anterior,Precio_nuevo, yFecha_Cambiode la tablaHistorial_Precios.FROM Historial_Precios: Especifica la tablaHistorial_Preciosde donde se obtienen los datos.WHERE ID_Producto = p_id_producto: Filtra los registros para incluir solo aquellos cuyoID_Productocoincide con el valor del parámetrop_id_producto.ORDER BY Fecha_Cambio DESC: Ordena los registros por la fecha de cambio de precio en orden descendente, mostrando primero los cambios más recientes.
-
Retorno del Cursor con el Historial de Precios:
RETURN v_historial;
- Si la consulta y la apertura del cursor son exitosas, esta línea retorna el cursor
v_historial, que contiene el historial de precios del producto.
- Si la consulta y la apertura del cursor son exitosas, esta línea retorna el cursor
-
Manejo de Excepciones:
EXCEPTION WHEN OTHERS THEN IF v_historial%ISOPEN THEN CLOSE v_historial; END IF; RETURN NULL;EXCEPTION: Esta palabra clave indica el inicio del bloque de manejo de excepciones.WHEN OTHERS THEN: Captura cualquier excepción que no haya sido manejada específicamente. Es una forma general de captura de errores.IF v_historial%ISOPEN THEN: Verifica si el cursorv_historialestá abierto.CLOSE v_historial: Cierra el cursorv_historialsi está abierto para liberar recursos.RETURN NULL: RetornaNULLen caso de que ocurra alguna excepción durante la ejecución de la función.
-
Fin del Bloque PL/SQL:
END obtener_historial_precios;
END obtener_historial_precios: Indica el final de la funciónobtener_historial_precios.
La función obtener_historial_precios permite obtener el historial de precios de un producto específico en base a su ID, retornando un cursor que contiene los registros del historial de precios asociados a ese producto. La función maneja posibles excepciones, cerrando el cursor y retornando NULL en caso de error, asegurando así que el sistema pueda manejar situaciones inesperadas sin interrupciones.
La función obtener_productos_por_categoria se encarga de obtener y devolver los productos pertenecientes a una categoría específica. Recibe como parámetro el ID de la categoría (p_id_categoria) y retorna un cursor que contiene todos los registros de la tabla Productos asociados a esa categoría.
CREATE OR REPLACE FUNCTION obtener_productos_por_categoria(
p_id_categoria IN INT
) RETURN SYS_REFCURSOR IS
v_productos SYS_REFCURSOR;
BEGIN
-- Abre el cursor y selecciona los productos de la categoría con el ID especificado.
OPEN v_productos FOR
SELECT ID_Producto, Nombre, Descripcion
FROM Productos
WHERE ID_Categoria = p_id_categoria
ORDER BY Nombre;
-- Retorna el cursor con los productos de la categoría.
RETURN v_productos;
EXCEPTION
-- Manejo de errores: captura cualquier excepción y cierra el cursor.
WHEN OTHERS THEN
IF v_productos%ISOPEN THEN
CLOSE v_productos;
END IF;
RETURN NULL;
END obtener_productos_por_categoria;
/-
Declaración de la Función:
CREATE OR REPLACE FUNCTION obtener_productos_por_categoria( p_id_categoria IN INT ) RETURN SYS_REFCURSOR IS
CREATE OR REPLACE FUNCTION obtener_productos_por_categoria: Esta línea declara la función y especifica que se debe crear o reemplazar la función existente con el mismo nombre.p_id_categoria IN INT: Parámetro de entrada que representa el ID de la categoría, de tipoINT.RETURN SYS_REFCURSOR IS: Especifica que la función retorna un valor de tipoSYS_REFCURSOR, que es un cursor de referencia que permite devolver múltiples filas.
-
Declaración de Variables:
v_productos SYS_REFCURSOR;
v_productos SYS_REFCURSOR: Declara una variable localv_productosde tipoSYS_REFCURSORpara almacenar el cursor que contendrá los productos de la categoría.
-
Inicio del Bloque PL/SQL:
BEGIN- Esta palabra clave indica el inicio del bloque de código PL/SQL donde se define la lógica de la función.
-
Apertura del Cursor y Selección de los Productos de la Categoría:
OPEN v_productos FOR SELECT ID_Producto, Nombre, Descripcion FROM Productos WHERE ID_Categoria = p_id_categoria ORDER BY Nombre;
OPEN v_productos FOR: Abre el cursorv_productospara la consulta especificada.SELECT ID_Producto, Nombre, Descripcion: Selecciona los camposID_Producto,Nombre, yDescripcionde la tablaProductos.FROM Productos: Especifica la tablaProductosde donde se obtienen los datos.WHERE ID_Categoria = p_id_categoria: Filtra los registros para incluir solo aquellos cuyoID_Categoriacoincide con el valor del parámetrop_id_categoria.ORDER BY Nombre: Ordena los registros por el campoNombreen orden ascendente, para una mejor legibilidad.
-
Retorno del Cursor con los Productos de la Categoría:
RETURN v_productos;
- Si la consulta y la apertura del cursor son exitosas, esta línea retorna el cursor
v_productos, que contiene los productos de la categoría especificada.
- Si la consulta y la apertura del cursor son exitosas, esta línea retorna el cursor
-
Manejo de Excepciones:
EXCEPTION WHEN OTHERS THEN IF v_productos%ISOPEN THEN CLOSE v_productos; END IF; RETURN NULL;EXCEPTION: Esta palabra clave indica el inicio del bloque de manejo de excepciones.WHEN OTHERS THEN: Captura cualquier excepción que no haya sido manejada específicamente. Es una forma general de captura de errores.IF v_productos%ISOPEN THEN: Verifica si el cursorv_productosestá abierto.CLOSE v_productos: Cierra el cursorv_productossi está abierto para liberar recursos.RETURN NULL: RetornaNULLen caso de que ocurra alguna excepción durante la ejecución de la función.
-
Fin del Bloque PL/SQL:
END obtener_productos_por_categoria;
END obtener_productos_por_categoria: Indica el final de la funciónobtener_productos_por_categoria.
La función obtener_productos_por_categoria permite obtener los productos de una categoría específica en base a su ID, retornando un cursor que contiene los registros de los productos asociados a esa categoría. La función maneja posibles excepciones, cerrando el cursor y retornando NULL en caso de error, asegurando así que el sistema pueda manejar situaciones inesperadas sin interrupciones.
La función obtener_detalles_pago se encarga de obtener y devolver los detalles de pago de un pedido específico. Recibe como parámetro el ID del pedido (p_id_pedido) y retorna un cursor que contiene todos los registros de la tabla Pago asociados a ese pedido.
CREATE OR REPLACE FUNCTION obtener_detalles_pago(
p_id_pedido IN INT
) RETURN SYS_REFCURSOR IS
v_detalles_pago SYS_REFCURSOR;
BEGIN
-- Abre el cursor y selecciona los detalles de pago del pedido con el ID especificado.
OPEN v_detalles_pago FOR
SELECT ID_Pago, Fecha, Total, Estado
FROM Pago
WHERE ID_Pedido = p_id_pedido
ORDER BY Fecha;
-- Retorna el cursor con los detalles de pago del pedido.
RETURN v_detalles_pago;
EXCEPTION
-- Manejo de errores: captura cualquier excepción y cierra el cursor.
WHEN OTHERS THEN
IF v_detalles_pago%ISOPEN THEN
CLOSE v_detalles_pago;
END IF;
RETURN NULL;
END obtener_detalles_pago;
/-
Declaración de la Función:
CREATE OR REPLACE FUNCTION obtener_detalles_pago( p_id_pedido IN INT ) RETURN SYS_REFCURSOR IS
CREATE OR REPLACE FUNCTION obtener_detalles_pago: Esta línea declara la función y especifica que se debe crear o reemplazar la función existente con el mismo nombre.p_id_pedido IN INT: Parámetro de entrada que representa el ID del pedido, de tipoINT.RETURN SYS_REFCURSOR IS: Especifica que la función retorna un valor de tipoSYS_REFCURSOR, que es un cursor de referencia que permite devolver múltiples filas.
-
Declaración de Variables:
v_detalles_pago SYS_REFCURSOR;
v_detalles_pago SYS_REFCURSOR: Declara una variable localv_detalles_pagode tipoSYS_REFCURSORpara almacenar el cursor que contendrá los detalles de pago del pedido.
-
Inicio del Bloque PL/SQL:
BEGIN- Esta palabra clave indica el inicio del bloque de código PL/SQL donde se define la lógica de la función.
-
Apertura del Cursor y Selección de los Detalles de Pago del Pedido:
OPEN v_detalles_pago FOR SELECT ID_Pago, Fecha, Total, Estado FROM Pago WHERE ID_Pedido = p_id_pedido ORDER BY Fecha;
OPEN v_detalles_pago FOR: Abre el cursorv_detalles_pagopara la consulta especificada.SELECT ID_Pago, Fecha, Total, Estado: Selecciona los camposID_Pago,Fecha,Total, yEstadode la tablaPago.FROM Pago: Especifica la tablaPagode donde se obtienen los datos.WHERE ID_Pedido = p_id_pedido: Filtra los registros para incluir solo aquellos cuyoID_Pedidocoincide con el valor del parámetrop_id_pedido.ORDER BY Fecha: Ordena los registros por el campoFechaen orden ascendente, para una mejor legibilidad.
-
Retorno del Cursor con los Detalles de Pago del Pedido:
RETURN v_detalles_pago;
- Si la consulta y la apertura del cursor son exitosas, esta línea retorna el cursor
v_detalles_pago, que contiene los detalles de pago del pedido especificado.
- Si la consulta y la apertura del cursor son exitosas, esta línea retorna el cursor
-
Manejo de Excepciones:
EXCEPTION WHEN OTHERS THEN IF v_detalles_pago%ISOPEN THEN CLOSE v_detalles_pago; END IF; RETURN NULL;EXCEPTION: Esta palabra clave indica el inicio del bloque de manejo de excepciones.WHEN OTHERS THEN: Captura cualquier excepción que no haya sido manejada específicamente. Es una forma general de captura de errores.IF v_detalles_pago%ISOPEN THEN: Verifica si el cursorv_detalles_pagoestá abierto.CLOSE v_detalles_pago: Cierra el cursorv_detalles_pagosi está abierto para liberar recursos.RETURN NULL: RetornaNULLen caso de que ocurra alguna excepción durante la ejecución de la función.
-
Fin del Bloque PL/SQL:
END obtener_detalles_pago;
END obtener_detalles_pago: Indica el final de la funciónobtener_detalles_pago.
La función obtener_detalles_pago permite obtener los detalles de pago de un pedido específico en base a su ID, retornando un cursor que contiene los registros de los pagos asociados a ese pedido. La función maneja posibles excepciones, cerrando el cursor y retornando NULL en caso de error, asegurando así que el sistema pueda manejar situaciones inesperadas sin interrupciones.