Morfeey
@Morfeey

MYSQL генерация случайных уникальных числовых значений?

Имеется задача гененирования случайных, уникальных 12 значных чисел во временную таблицу. Было принято решение написания функций на скуле, но имеются проблемы с синтаксисом и немного с самими функиями. Прогуглил тонну страниц интернета, но результата мало. Возможно поможет кто ?

Create12num
DELIMITER $$
CREATE DEFINER=`dido`@`localhost` FUNCTION `Create12num`() RETURNS bigint(12)
BEGIN
	
	DECLARE num BIGINT;
	SET num = ROUND((RAND() * (999999999999 - 100000000000)) + 100000000000);
	RETURN num;

END$$
DELIMITER ;

InTables
DELIMITER $$
CREATE DEFINER=`dido`@`localhost` FUNCTION `InTables`(`num` BIGINT) RETURNS tinyint(1)
BEGIN
	DECLARE RESULT BOOLEAN;
    DECLARE CountCodes INT;
    DECLARE CountTempCodes INT;
    SET CountCodes = (SELECT count(*) FROM codes WHERE code = num);
    SET CountTempCodes = (SELECT count(*) FROM temp_codes WHERE code = num);
    SET RESULT = IF(CountCodes=0 AND CountTempCodes=0, TRUE, FALSE);
	RETURN RESULT;
END$$
DELIMITER ;



Первые 2 создались и хоть как-то но работают (хоть и вторая очень странно работает (при тестировании возвращает противоположное нужному)). А вот последняя даже создание не проходит:
CreateCode
DELIMITER //
CREATE FUNCTION CreateCode()
RETURNS BIGINT
BEGIN
	DECLARE result BIGINT;
    DECLARE num12 BIGINT;
    
    SET num12 = 0;
	SET result = 1;
	
	RETRY: WHILE (result!= num12)
		SET num12 = Create12num();
		SET result = IF (InTables(num12), result, num12);
	END WHILE RETRY;
    
	RETURN result;
END; //

DELIMITER ;


Ошибка:
5ca473671d41d877541960.png

Думаю для тех кто в этом разбирается не составит особого труда разобрать что я пытался сделать)
З.Ы: Не против ударов по лицу и предложений более лучших решений)_
  • Вопрос задан
  • 63 просмотра
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы