Mysql 在循环中选择存储过程
我正在构建一系列的过程,在这些过程中,我必须在几乎所有的过程中插入泛型名称,并对列进行倍增 所以我想创建一个程序来为我生成一个文本。文本的代码如下所示:Mysql 在循环中选择存储过程,mysql,sql,stored-procedures,Mysql,Sql,Stored Procedures,我正在构建一系列的过程,在这些过程中,我必须在几乎所有的过程中插入泛型名称,并对列进行倍增 所以我想创建一个程序来为我生成一个文本。文本的代码如下所示: SELECT CONCAT( CHAR( FLOOR(65 + (RAND() * 25)))); 这会为我生成一个随机字符。这就是我做的程序: DELIMITER ;; CREATE DEFINER=`my_definer`@`localhost` PROCEDURE GenericName(IN NumRows INT,OUT retor
SELECT CONCAT( CHAR( FLOOR(65 + (RAND() * 25))));
这会为我生成一个随机字符。这就是我做的程序:
DELIMITER ;;
CREATE DEFINER=`my_definer`@`localhost` PROCEDURE GenericName(IN NumRows INT,OUT retorno VARCHAR)
BEGIN
DECLARE i INT;
SET i = 1;
SET retorno = "";
WHILE i <= NumRows DO
SET retorno = SELECT CONCAT( CHAR( FLOOR(65 + (RAND() * 25))));
SET i = i + 1;
END WHILE;
END;;
DELIMITER ;
外部链接:
我看到可以从另一个过程调用一个过程
问题1
您不应该使用存储过程。您应该使用存储函数
问题2
在循环中,您忘记在CONCAT中包含returno
问题3
还有,我会改变
CHAR(FLOOR(65 + (RAND() * 25)))
到
让字母Z有机会出现
问题4
替换
SET retorno = SELECT CONCAT(...
与
建议的存储函数
试试看!!!最初,我试图做一些类似设置returno=concatreturno的事情,选择concatcharfloor65+RAND*25;因此,我可以创建一个包含任意多个字符的完整字符串。但是,我甚至没有完成上面的内容=感谢您对函数而不是过程的修改。我得到了以下错误,以及您发布的代码:您的SQL语法中有一个错误;查看与您的MySQL服务器版本对应的手册,以了解可在“SELECT CONCATretorno,CHAR FLOOR65+RAND*25”附近使用的正确语法;设置i=i+1;'在第11行。编辑器突出显示代码的以下部分:选择CONCATretorno,CHAR FLOOR65+RAND*25;设置i=i+1;谢谢你的快速帮助。它说在函数my_definer.GenericName中找不到返回,我添加了返回号;在结束之后;我使用selectgenericname7测试它是否有效;PS:再次感谢您的帮助,我从您的回答中学到了很多,感谢您对社区的帮助=很抱歉我错过了回报。我刚刚加了。
CHAR(FLOOR(65.5 + (RAND() * 25)))
SET retorno = SELECT CONCAT(...
SET retorno = CONCAT(...
DELIMITER ;;
CREATE DEFINER=`my_definer`@`localhost` FUNCTION GenericName
(NumRows INT)
RETURNS VARCHAR(20)
DETERMINISTIC
BEGIN
DECLARE i INT;
DECLARE retorno VARCHAR(20);
SET i = 1;
SET retorno = "";
WHILE i <= NumRows DO
SET retorno = CONCAT(retorno,CHAR(FLOOR(65.5 + (RAND() * 25))));
SET i = i + 1;
END WHILE;
RETURN retorno;
END;;
DELIMITER ;
INSERT INTO tbl_a (name, position) VALUES (GenericName(7),GenericName(5));