mysql错误#2014:resultset为空时存储过程中

6mw9ycah  于 2021-06-18  发布在  Mysql
关注(0)|答案(2)|浏览(371)

我试图在mysql(v5.7.21)中用phpmyadmin(v4.7.9)创建一个存储过程,它有时会返回一个空的结果集。

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使用的默认选项,但是我试图调整它们,但没有效果。
我错过了什么?

az31mfrm

az31mfrm1#

存储过程对错误的处理往往比简单语句更为“挑剔”(见下文),因此需要为该错误添加一个处理程序。

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

这里的原则是,你不能在一个简单的查询中处理这些错误,因此,出于必要,它们被忽略了;你可以在sp中处理它们,所以,好吧,处理它们。。。

k3fezbri

k3fezbri2#

程序没问题。
它是phpmyadmin,在使用callinsql选项卡执行时不处理存储过程。
您可以通过单击左侧导航树中过程名称前面的图标来运行该过程。

相关问题