【问题标题】:Using a custom(user-defined) function inside a procedure in mysql在mysql的过程中使用自定义(用户定义)函数
【发布时间】:2021-08-05 21:51:59
【问题描述】:

在下面的代码中,有一个生成随机字符串的函数,以及一个用于将随机字符串插入到名为Users 的表中的过程。我已经成功创建了该函数,并且它可以正常工作,但是当我尝试创建该过程时,它在"SET @str = SELECT randstring(8);" 行返回语法错误我想我试图以错误的方式调用我的函数。我是数据库新手,请多多包涵。

DELIMITER $$

CREATE FUNCTION `Randstring`(LENGTH SMALLINT(3)) RETURNS VARCHAR(100) CHARSET utf8
BEGIN
    SET @returnStr='';
    SET @allowedChars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
    SET @i = 0;

    WHILE (@i < LENGTH) DO
        SET @returnStr = CONCAT(@returnStr, SUBSTRING(@allowedChars, FLOOR(RAND() * LENGTH(@allowedChars) + 1), 1));
        SET @i = @i + 1;
    END WHILE;

    RETURN @returnStr;
END

DELIMITER $$
CREATE PROCEDURE insertdata()
BEGIN
    SET @str='';
    DECLARE i INT DEFAULT 0;
    WHILE i <= 1000 DO
        SET @str = SELECT randstring(8);
        INSERT INTO Users (user_name) 
        VALUES(@str);
        SET i = i + 1;
    END WHILE;
END $$
DELIMITER ;

【问题讨论】:

    标签: mysql sql stored-procedures stored-functions


    【解决方案1】:

    大概,你打算:

    SET @str = randstring(8);
    

    或者:

    SELECT @str := randstring(8);
    

    或者:

    SET @str = (SELECT @randstring(8));
    

    SELECT 用作子查询时需要在其前面加上括号。但是,实际上不需要子查询。

    【讨论】:

    • 先生,我在某处读到您使用关键字“CALL”来使用过程和“SELECT”来使用函数,所以这就是为什么在那里写“SELECT”。我不应该在这里使用它。
    猜你喜欢
    • 2013-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-29
    • 1970-01-01
    • 1970-01-01
    • 2017-09-06
    • 1970-01-01
    相关资源
    最近更新 更多