MySQL - 如何存储执行结果

标签 mysql sql executequery

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

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 
//

关于MySQL - 如何存储执行结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16144715/

相关文章:

mysql - 使用同一表中另一行的数据更新行

php - Mysql 查询从 php 更新

sql - 是否可以使 ORDER BY 子句成为 NO-OP 而不完全排除它?

sql - H2中通过PreparedStatement查询抛出异常: This method is not allowed for a prepared statement; use a regular statement instead

sql - Postgres 从字符串运行 SQL 语句

javascript - 如何从 mysql 检索 url 到 nightmare .goto 函数

MySQL Select/Join 仅返回第一行

mysql - SQL 在一个查询中进行多项求和

php - 过时的 SQL 注入(inject)预防器?

Javascript 在继续之前等待结果