递归函数,保存DynamicPreparedStatement

时间:2019-03-19 10:29:04

标签: mysql function recursion

CREATE DEFINER=`tmpUser`@`%` FUNCTION `getUniqueIdForTable`(VARCHAR(250)) RETURNS varchar(250) CHARSET utf8mb4
BEGIN
    SET @id = MD5(NOW()+RAND());
    SET @stmntSTR = CONCAT("SELECT id FROM ",@tablename," WHERE id = @id"); 

    IF NOT isempty(EXECUTE stmnt) THEN #experimental        
        return getUniqueIdForTable(@tablename);
    ELSE 
        return @id;
    END IF;     
END

您好,我正在尝试创建一个递归函数来创建一个动态且不重复的ID。 我的问题是获取stmntSTR的结果并检查其元素

1 个答案:

答案 0 :(得分:0)

已经有一个MySQL内置函数生成一个UUID:UUID()。您可以使用它,而不用自己写。


如果您仍然想自己做,则无需为此目的创建递归函数。

WHILE循环就足够了

CREATE DEFINER=`tmpUser`@`%` FUNCTION `getUniqueIdForTable`(VARCHAR(250)) RETURNS varchar(250) CHARSET utf8mb4
BEGIN
    SET @found = 0;
    WHILE (FOUND = 0)
        SET @id = MD5(NOW()+RAND());
        SET @stmntSTR = CONCAT("SELECT id FROM ",@tablename," WHERE id = @id"); 
        IF isempty(EXECUTE stmnt) THEN
            SET @found = 1;
        END IF;
    END WHILE;
    RETURN @id;
END