【问题标题】:Stored procedures using variable as table name and retrieve data in output variable使用变量作为表名并在输出变量中检索数据的存储过程
【发布时间】:2013-06-24 17:50:14
【问题描述】:

我正在编写一个存储过程,其中我将变量用作表名,并在输出参数中检索查询结果

下面是存储过程`

DELIMITER //
CREATE  PROCEDURE db_test.test(IN tblname varchar(100),OUT Valv varchar(100))
BEGIN
SET @a = CONCAT('SELECT name INTO  Valv FROM ', tbname ,' limit 1') ;
PREPARE stmt1 FROM @a;
EXECUTE stmt1;
DEALLOCATE PREPARE stmt1;
END;
//
DELIMITER ;

当我使用以下命令调用上述过程时

CALL db_test.test('db_test.t_names',@name);
select @name;

我收到错误消息 PROCEDURE db_test.test 无法返回给定上下文中的结果集

我已搜索此错误的解决方案,但找不到。 请为上述查询提出解决方案。

【问题讨论】:

    标签: mysql stored-procedures


    【解决方案1】:

    您必须在准备好的语句中使用用户变量。 bug report 已经存在。

    DELIMITER //
    CREATE  PROCEDURE db_test.test(IN tblname varchar(100),OUT Valv varchar(100))
    BEGIN
    SET @a = CONCAT('SELECT name INTO @Valv FROM ', tbname ,' limit 1') ;
    PREPARE stmt1 FROM @a;
    EXECUTE stmt1;
    DEALLOCATE PREPARE stmt1;
    SET Valv = @Valv;
    END;
    //
    DELIMITER ;
    

    【讨论】:

      【解决方案2】:

      试试这个

      DELIMITER //
      CREATE  PROCEDURE db_test.test(IN tblname varchar(100),OUT Valv varchar(100))
      BEGIN
      SET @a = CONCAT('SELECT name INTO  ', Valv ,' FROM ', tbname ,' limit 1') ;
      PREPARE stmt1 FROM @a;
      EXECUTE stmt1;
      DEALLOCATE PREPARE stmt1;
      END;
      //
      DELIMITER ;
      

      【讨论】:

      • tbname 不是参数的名称。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-19
      • 1970-01-01
      相关资源
      最近更新 更多