我正在编写一个存储过程,其中我将变量作为表名,并在输出参数中检索查询结果
以下是存储过程`
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无法返回给定上下文中的结果集
我已搜索此错误的解决方案,但找不到它。 请为上述查询建议解决方案。
答案 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 ;