2010-06-28 193 views
3

我已经在MySQL中创建一个存储过程,如:MySQL存储过程

DELIMITER // 
CREATE PROCEDURE test() 
BEGIN 
    SELECT * FROM buyers; 
END // 
DELIMITER ; 

,但是当我把它用,

call test() 

它返回一个错误说:

#1312 - 程序ticketninja.test1无法返回给定上下文中的结果集

回答

2

返回结果集可以存储procedcure内但不是内存储的功能中使用的语句。这种禁止包括没有INTO var_list子句的SELECT语句以及其他语句,如SHOW,EXPLAIN和CHECK TABLE。对于在函数定义时可以确定返回结果集的语句,不允许从函数错误返回结果集(ER_SP_NO_RETSET)。对于仅在运行时才能确定以返回结果集的语句,PROCEDURE%s无法返回发生给定上下文中的结果集错误(ER_SP_BADSELECT)。

也许你需要使用临时表,就像这个例子:

+0

它给出了一个错误: #1172 - 结果包含多个行 – Kalx 2010-06-28 12:39:39

+0

更新了我的帖子;链接的资源包含您可能可以调整的完整示例。 – miku 2010-06-28 12:51:51

2

确保您的代码(或客户端库)调用mysql_set_server_options()启用MYSQL_OPTION_MULTI_STATEMENTS_ON