我试图在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使用的默认选项,但是我试图调整它们,但没有效果。
我错过了什么?
2条答案
按热度按时间az31mfrm1#
存储过程对错误的处理往往比简单语句更为“挑剔”(见下文),因此需要为该错误添加一个处理程序。
这里的原则是,你不能在一个简单的查询中处理这些错误,因此,出于必要,它们被忽略了;你可以在sp中处理它们,所以,好吧,处理它们。。。
k3fezbri2#
程序没问题。
它是phpmyadmin,在使用callinsql选项卡执行时不处理存储过程。
您可以通过单击左侧导航树中过程名称前面的图标来运行该过程。