存储过程使用变量作为表名并在输出变量中检索数据

时间:2013-06-24 06:07:55

标签: mysql stored-procedures

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

以下是存储过程`

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;

我收到错误了 过程db_test.test无法返回给定上下文中的结果集

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

2 个答案:

答案 0 :(得分:3)

您必须在预准备语句中使用用户变量。已经存在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 ;

答案 1 :(得分:0)

试试这个

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 ;