【问题标题】:MySQL - how to store execute resultMySQL - 如何存储执行结果
【发布时间】:2013-04-22 10:21:32
【问题描述】:

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

希望对你有帮助。

【问题讨论】:

    标签: mysql sql executequery


    【解决方案1】:

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

    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',@randomVal)。我应该如何更正调用此过程以及如何正确访问存储执行结果的 randomVal?
    猜你喜欢
    • 2019-07-15
    • 2011-10-22
    • 2012-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-07
    • 1970-01-01
    • 2014-06-15
    相关资源
    最近更新 更多