Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/tfs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 在循环中选择存储过程_Mysql_Sql_Stored Procedures - Fatal编程技术网

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));