在 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
当用作子查询时需要在它前面有一个括号。但是,实际上不需要子查询。
在下面的代码中,有一个生成随机字符串的函数,以及一个应该将随机字符串插入到名为 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
当用作子查询时需要在它前面有一个括号。但是,实际上不需要子查询。