Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/66.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_Executequery - Fatal编程技术网

MySQL-如何存储执行结果

MySQL-如何存储执行结果,mysql,sql,executequery,Mysql,Sql,Executequery,我在mysql中编写了一个过程,它从表中返回一个随机值。但是我有很多表,我想多次使用这个过程,所以我添加了一个过程参数名table,从中我想对value进行rand,我将把这个名称作为参数传递给这个过程: delimiter // CREATE PROCEDURE randomDefVal(val varchar(50), tableName varchar(50),OUT randomVal varchar(50)) BEGIN SET @tmpTableName = table

我在mysql中编写了一个过程,它从表中返回一个随机值。但是我有很多表,我想多次使用这个过程,所以我添加了一个过程参数名table,从中我想对value进行rand,我将把这个名称作为参数传递给这个过程:

delimiter //

CREATE PROCEDURE randomDefVal(val varchar(50), tableName varchar(50),OUT randomVal varchar(50))

  BEGIN

  SET @tmpTableName = tableName;

  SET @sql_querry = concat('SELECT',@tmpVal,'FROM',@tmpTableName,'ORDER BY rand() LIMIT 1');

  PREPARE stmt FROM @sql_text;

  EXECUTE stmt using @randomVal;

  DEALLOCATE PREPARE stmt;       

END
但当我运行此代码时,我有一个错误:

Error Code: 1064. You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'NULL' at line 1
谁能解释一下我如何将
EXECUTE
的结果存储在变量中

//解决方案

对于那些与我有相同问题的人,我想展示一个我提出的示例解决方案:

delimiter //

CREATE PROCEDURE tmpProcedure(tableName varchar(20))

BEGIN

DECLARE my_query varchar(60);

DECLARE value varchar(20);

SET @my_query = concat('Select Name FROM ',tableName,' ORDER BY rand() LIMIT 1 INTO @outvar');

PREPARE stmt from @my_query;

EXECUTE stmt;

SET val = (SELECT @outvar); 

END//

我希望它能对您有所帮助。

我看到您的代码中有一些错误,特别是关于拼写不同或根本没有声明的变量名。请检查以下有效代码:

delimiter //

CREATE PROCEDURE randomDefVal(val varchar(50), tableName varchar(50),OUT randomVal varchar(50))

BEGIN

SET @tmpTableName = tableName;
SET @tmpVal = val;
SET @randomVal = randomVal;

SET @sql_querry = concat('SELECT',@tmpVal,'FROM',@tmpTableName,'ORDER BY rand() LIMIT 1');

PREPARE stmt FROM @sql_text;

EXECUTE stmt using @randomVal;

DEALLOCATE PREPARE stmt;

END 
//

我知道我犯了什么错误。但我一直都犯同样的错误。也许我认为这个程序不正确。我刚做了“CALL randomDefVal('xyz','abc',@randomdeval”)。我应该如何正确调用此过程,以及如何正确访问存储执行结果的randomVal?