Имеется задача гененирования случайных, уникальных 12 значных чисел во временную таблицу. Было принято решение написания функций на скуле, но имеются проблемы с синтаксисом и немного с самими функиями. Прогуглил тонну страниц интернета, но результата мало. Возможно поможет кто ?
Create12numDELIMITER $$
CREATE DEFINER=`dido`@`localhost` FUNCTION `Create12num`() RETURNS bigint(12)
BEGIN
DECLARE num BIGINT;
SET num = ROUND((RAND() * (999999999999 - 100000000000)) + 100000000000);
RETURN num;
END$$
DELIMITER ;
InTablesDELIMITER $$
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 создались и хоть как-то но работают (хоть и вторая очень странно работает (при тестировании возвращает противоположное нужному)). А вот последняя даже создание не проходит:
CreateCodeDELIMITER //
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 ;
Ошибка:
Думаю для тех кто в этом разбирается не составит особого труда разобрать что я пытался сделать)
З.Ы: Не против ударов по лицу и предложений более лучших решений)_