在 mysql 中的过程中使用自定义(用户定义)函数

Using a custom(user-defined) function inside a procedure in mysql

在下面的代码中,有一个生成随机字符串的函数,以及一个应该将随机字符串插入到名为 Users 的 table 中的过程。我已经成功地创建了这个函数并且它没有任何问题地工作,但是当我尝试创建这个过程时,它 returns 在第 "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 ;

据推测,您打算:

SET @str = randstring(8);

或者:

SELECT @str := randstring(8);

或者:

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

A SELECT 当用作子查询时需要在它前面有一个括号。但是,实际上不需要子查询。