首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL -如何存储执行结果

问MySQL -如何存储执行结果
EN

Stack Overflow用户
提问于 2013-04-22 18:21:32
回答 1查看 2.1K关注 0票数 3

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

代码语言:javascript
复制
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

但是当我运行这段代码时,我有一个错误:

代码语言:javascript
复制
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的结果存储在一个变量中?

//解决方案

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

代码语言:javascript
复制
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//

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

EN

回答 1

Stack Overflow用户

发布于 2013-04-22 18:37:27

我在你的代码中发现了一些错误,特别是关于变量名的拼写不同或根本没有声明的错误。看看这段代码,它应该是有效的:

代码语言:javascript
复制
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 
//
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16144715

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档