MYSQL错误#2014:结果集为空时在存储过程中

时间:2018-09-27 13:09:46

标签: mysql stored-procedures phpmyadmin

我正在尝试使用phpmyadmin(v4.7.9)在MYSQL(v5.7.21)中创建一个存储过程,该存储过程有时会返回空结果集。

CREATE DEFINER=`my_database`@`%` PROCEDURE `emptytest`(IN `_id` INT(11))
NOT DETERMINISTIC NO SQL SQL SECURITY DEFINER
    select * from my_table where id=_id

然后用以下命令调用它:

call emptytest(1);

当表中存在ID时,这可以正常工作:

id  name
--------
1   bob

但在没有要返回的行时引发错误:

call emptytest(11);
#2014 - Commands out of sync; you can't run this command now

但是我希望它返回与运行SQL语句相同的结果:

select * from my_table where id=11

这是一个空列表:

id  name
--------
  • 我一直在寻找类似问题的StackOverflow,但其中大多数解决了多个查询的问题,而这不是我的情况。

  • 据我所知,MySQL文档指出过程应该能够返回表。

  • 在此示例中,我显示了phpmyadmin使用的默认选项,但我尝试对其进行了无用调整。

我想念什么?

2 个答案:

答案 0 :(得分:0)

与简单的语句(参见下文)相比,存储过程往往更容易出错,所以您需要为该错误添加处理程序。

DECLARE EXIT HANDLER FOR 2014 BEGIN select 'empty set' as `Error`; END;

这里的原理是,您不能真正在简单的查询中处理此类错误,因此,有必要将其忽略;这些错误可能会被忽略。您可以在SP中处理它们,所以,处理它们...

答案 1 :(得分:0)

该程序没有问题。

是phpMyAdmin,它在SQL选项卡中使用CALL执行时不处理存储过程。

您可以通过单击左侧导航树中过程名称前面的图标来运行过程。