小编典典

MySQL存储过程不适用于SELECT(基本问题)

mysql

我正在使用一个平台(performforms),该平台要求我对大多数查询使用存储过程,并且从未使用过存储过程,所以无法弄清楚自己在做什么错。以下语句执行无错误:

DELIMITER //
DROP PROCEDURE IF EXISTS test_db.test_proc//
CREATE PROCEDURE test_db.test_proc() SELECT 'foo'; //
DELIMITER ;

但是当我尝试使用以下命令调用它时:

CALL test_proc();

我收到以下错误:

#1312 - PROCEDURE test_db.test_proc can't return a result set in the given context

我正在phpmyadmin 3.2.4,PHP版本5.2.12和mysql服务器版本5.0.89-community中执行这些语句。

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

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 ;

工作正常,当我称它为:

CALL get_sum(@t); SELECT @t;

我得到的总和没有问题。

最终,我需要做的是在存储过程中包装一个漂亮的SELECT语句,因此我可以调用它,并返回多个字段的多行。现在,我只是想让 所有 选择工作。

任何帮助是极大的赞赏。


阅读 390

收藏
2020-05-17

共1个答案

小编典典

弄清楚了。这不是PHP的错误(尽管曾经是)-在某些版本的phpmyadmin中是错误。相同的错误会间歇性地出现,然后在各种子版本中进行修复(请参见上文):

#1312 - PROCEDURE [name] can't return a result set in the given context

此行为似乎仅限 于phpmyadmin内部存储过程中的SELECT语句

使用像MySQL Workbench这样的客户端可以解决此问题(或者您可以升级phpmyadmin,但是如果您使用的是像我这样的共享服务器,那会很麻烦)。

无论如何,感谢大家的帮助。

2020-05-17