首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >不使用SELECT的MySQL存储过程(基本问题)

不使用SELECT的MySQL存储过程(基本问题)
EN

Stack Overflow用户
提问于 2010-03-02 01:40:59
回答 4查看 13.5K关注 0票数 5

我使用的是一个平台(完美形式),它要求我在大多数查询中使用存储过程,而且我从未使用过存储过程,所以我不知道自己做错了什么。以下语句执行时没有错误:

代码语言:javascript
复制
DELIMITER //
DROP PROCEDURE IF EXISTS test_db.test_proc//
CREATE PROCEDURE test_db.test_proc() SELECT 'foo'; //
DELIMITER ;

但当我试图用:

代码语言:javascript
复制
CALL test_proc();

我得到以下错误:

代码语言:javascript
复制
#1312 - PROCEDURE test_db.test_proc can't return a result set in the given context

我正在phpmyadmin 3.2.4、PHPVersion5.2.12和mysql服务器版本5.0.89社区中执行这些语句。

当我编写一个返回参数的存储过程,然后选择它时,一切都很好(例如):

代码语言:javascript
复制
DELIMITER //
DROP PROCEDURE IF EXISTS test_db.get_sum//
CREATE PROCEDURE test_db.get_sum(out total int)
BEGIN
SELECT SUM(field1) INTO total FROM test_db.test_table;
END //
DELIMITER ;

很好,当我称之为:

代码语言:javascript
复制
CALL get_sum(@t); SELECT @t;

我拿到这笔钱没问题。

最终,我需要做的是让一个花哨的SELECT语句封装在一个存储过程中,这样我就可以调用它,并返回多行多个字段。就目前而言,我只是想让任何有选择的工作。

任何帮助都是非常感谢的。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-03-13 02:22:37

弄明白了。这不是PHP的bug (尽管它曾经是)--它是phpmyadmin的某些版本中的一个bug。同一错误间歇性地再次出现,然后在不同的subversions中修复(见上文):

代码语言:javascript
复制
#1312 - PROCEDURE [name] can't return a result set in the given context

此行为仅限于phpmyadmin中存储过程中的SELECT语句。

使用像MySQL工作台这样的客户端可以解决这个问题(或者您可以升级phpmyadmin,但是如果您像我一样在共享服务器上,这是很痛苦的)。

不管怎样,谢谢大家的帮助。

票数 9
EN

Stack Overflow用户

发布于 2010-03-02 01:54:07

检查您的php版本,看看这是否是报告的错误(请参阅这里)。

见本文:无法返回给定上下文中的结果集

票数 1
EN

Stack Overflow用户

发布于 2013-08-30 05:14:04

这可能是围绕一个处理PHP的错误和在存储过程/例程中进行选择。一个可能的工作是在存储过程中使用选择。转到将结果降为一个变量。这在我读到的一些其他案件中起了作用。

代码语言:javascript
复制
   SELECT * FROM category INTO c;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2360371

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档