Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
1
respuesta

Stored Procedure sp_numero_facturas

Vamos a transformar el Stored Procedure sp_numero_facturas en una función llamada f_numero_facturas que toma como parámetro la fecha. Decidí mejorar el script con ciertas protecciones contra valores nulos, formatos incorrectos y valores fuera de rango. Aquí está la función:


DELIMITER $$

CREATE FUNCTION f_numero_facturas (fecha DATE) RETURNS INT BEGIN DECLARE n_facturas INT; DECLARE error_msg VARCHAR(100);

-- Validar que la fecha no sea nula
IF fecha IS NULL THEN
    SET error_msg = 'La fecha no puede ser nula.';
    SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = error_msg;
END IF;

-- Validar el formato de la fecha y el rango adecuado
IF fecha < '1920-01-01' OR fecha > '2025-12-31' THEN
    SET error_msg = 'La fecha debe estar en el rango de 1920-01-01 a 2025-12-31.';
    SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = error_msg;
END IF;

-- Contar el número de facturas para la fecha proporcionada
SELECT COUNT(*) INTO n_facturas 
FROM facturas 
WHERE FECHA_VENTA = fecha;

RETURN n_facturas;

END $$

DELIMITER ;


Para ejecutar esta función y obtener el número de facturas para una fecha específica, utilizar el comando SELECT de la siguiente manera:

SELECT f_numero_facturas('2017-01-01') AS Numero_Facturas;


Explicación:

  1. DELIMITER $$: Cambia el delimitador de comandos de ; a $$ para permitir definir el bloque de la función.

  2. CREATE FUNCTION f_numero_facturas (fecha DATE) RETURNS INT: Crea una función llamada f_numero_facturas que toma un parámetro de entrada fecha de tipo DATE y devuelve un entero (INT).

  3. DECLARE n_facturas INT: Declara una variable n_facturas de tipo entero para almacenar el número de facturas.

  4. DECLARE error_msg VARCHAR(100): Declara una variable error_msg de tipo VARCHAR(100) para almacenar mensajes de error.

  5. Validación de la Fecha:

    5.1. Verifica que la fecha no sea nula. Si es nula, establece un mensaje de error y lanza una señal SQL para interrumpir la ejecución.

    5.2. Verifica que la fecha esté en el rango de 1920-01-01 a 2025-12-31. Si no, establece un mensaje de error y lanza una señal SQL para interrumpir la ejecución.

  6. SELECT COUNT() INTO n_facturas FROM facturas WHERE FECHA_VENTA = fecha*: Cuenta el número de facturas para la fecha proporcionada y almacena el resultado en n_facturas.

  7. RETURN n_facturas: Devuelve el número de facturas.

  8. DELIMITER ;: Cambia el delimitador de comandos de vuelta a ;

1 respuesta

Hola, Javier ,

Gracias por compartir tu código con nosotros. Recuerda que estamos aquí para ayudarte. Si necesitas ayuda, no dudes en buscarnos en el foro.

¡Gracias nuevamente!

Saludos,

Si este post te ayudó, por favor, marca como solucionado ✓. Continúa con tus estudios!