【问题标题】:Recursive Function, Saving DynamicPreparedStatement递归函数,保存 DynamicPreparedStatement
【发布时间】:2019-03-19 10:29:03
【问题描述】:
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 的结果并检查它的元素

【问题讨论】:

  • 如果您尝试动态创建表,我可以 99% 确定您在设计过程中做错了什么
  • 我正在动态执行此功能,因为我使用触发器调用它,它需要是唯一的但不应该是自动增量,通常我使用 java 添加 id 但它在触发器中调用

标签: mysql function recursion


【解决方案1】:

已经有一个生成 UUID 的 MySQL 内置函数: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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-07-28
    • 2020-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-01
    相关资源
    最近更新 更多