Elaboración de Store Procedure en MySQL – Números Aleatorios

Buenas Colegas,

Esta semana tuve que implementar un requerimiento y me pareció interesante compartirlo, ya que muchas veces nos puede ser mas sencillo implementar el algoritmo a nivel de Base de datos.

El caso es el siguiente: debía confeccionar un formulario para ingresar los datos de la persona en mi sistema, en un input de ese registro/formulario se debía especificar cantidad de cupones (números aleatorios) que se debian crear en función de ese registro que ingresaba al sistema, entonces pensé!, esto no lo voy hacer por un script de programación, voy a buscar otra alternativa, y opté por generarlo a nivel de un STORE PROCEDURE en base de datos y así no modifiqué mucho mi código del sistema.

Les comparto el algoritmo en lenguaje SQL-STATEMENT a nivel de MySQL.

---------------------
BEGIN

 DECLARE contador INT UNSIGNED DEFAULT 0;
 DECLARE numCupon BIGINT SIGNED DEFAULT 0;
 DECLARE cantidaEncontrado INT;

 #TRUNCATE table cupones;

 START TRANSACTION;

 WHILE contador < CantidadCupones DO
 /* Esta es mi funcion que genera el Numero Aleatorio*/
 SET numCupon = numero_aleatorio();

 SET cantidaEncontrado = (SELECT COALESCE(COUNT(*),0) FROM cupones WHERE numCupon = codigo_cupon);

 IF (cantidaEncontrado = 0) THEN
 /*
 El SP recibe por parametro 2 variables/parametros:
 Letra: Quiero generar mis numeros aleatorios y le contacteno un a letra.
 IdActivacion: Es la llave Forenea al registro de la persona.
 */
 INSERT INTO cupones (codigo_cupon,fk_activacion) VALUES ( CONCAT(numCupon,Letra),IdActivacion);

 SET contador=contador+1;
 
 END IF;

 END WHILE;

COMMIT;

END
--------------------------

Por otro lado esta es mi función llamada numero_aleatorio() para crear el numero random.

BEGIN
	/* Es una función y retorna un INT*/
	RETURN FLOOR((1111+RAND()) * (9999-1111)) + 100;

END