为啥调用存储过程不返回任何东西?

Posted

技术标签:

【中文标题】为啥调用存储过程不返回任何东西?【英文标题】:Why calling a stored procedure does not return anything?为什么调用存储过程不返回任何东西? 【发布时间】:2015-03-09 06:09:10 【问题描述】:

我用 in 参数创建了一个存储过程。当我将此过程称为没有错误时,不会向我显示任何结果。这段代码有什么问题?

 drop PROCEDURE if exists `getUsersByContact`;

 delimiter $$
 Create PROCEDURE `getUsersByContact`(
   IN contact1 VARCHAR(10)
 )
 BEGIN
     SELECT id,name FROM tbl_user WHERE contact = contact1;
END $$
delimiter ;

当我这样打电话时

 call getUsersByContact('9999999999');

它不返回任何行,并且 phpmyadmin 中没有显示错误。但是,当我使用 out 参数并调用存储过程并选择该变量时,它工作正常。我也试过this link和this link。

【问题讨论】:

@usermesam0023 但是当我使用 out 参数时,它会显示错误Result consisted of more than one row,如果表中存在多个具有相同联系号码的行。 那么可能是 phpMyAdmin 的问题。您是否尝试过使用 mysql 命令行或其他 SQL 客户端? 我猜你在数据库中没有这样的行。适合我:sqlfiddle.com/#!2/719f95/1 当您尝试通过 phpMyAdmin 中的图形工具运行它时会发生什么?最简单的方法是展开导航窗格中的“程序”链接并在此处选择您的程序。 【参考方案1】:

我正在添加我的答案,相信它可能对其他人有用。

我在同样的问题上苦苦挣扎,但是当我在 mysqlworkbench 中调用这个程序时,它就像一个魅力。所以这可能是@a_horse_with_no_name 建议的phpmyadmin 的问题。

【讨论】:

【参考方案2】:

在 SP 中运行查询时, 这个可以用!!

 SELECT id,name
  FROM tbl_user 
  WHERE contact = `contactname`;

但是这个不行。

SELECT id,name
 FROM tbl_user
 WHERE contact = contact1;

这里可以找到原因:http://mysqldb.bigresource.com/SELECT-INTO-returns-null-in-Stored-Procedure-Jx95y6IPJ.html

【讨论】:

我应该怎么做才能解决我的问题?我只需要所有具有相同手机号码的行(例如,检查他们是否输入了假联系号码)。我知道如何在 sql 中执行此操作,但我需要通过存储过程执行此操作。 看看这个:***.com/questions/14900351/… 也许你可以使用 FUNCTION 而不是 PROCEDURE

以上是关于为啥调用存储过程不返回任何东西?的主要内容,如果未能解决你的问题,请参考以下文章

MS Management Studio 中的存储过程返回数据。使用 C# 调用时不返回任何数据

EF4 - 选定的存储过程不返回任何列

PHP MySQL - 为啥存储过程调用在 PHP 代码中意外结束

为啥mysql创建存储函数,会是这样报错

调用另一个存储过程后从存储过程返回错误结果

SQL存储过程等待并按顺序执行