MySQL存储过程没有值检索

Posted

技术标签:

【中文标题】MySQL存储过程没有值检索【英文标题】:MySQL stored procedure no values retrieve 【发布时间】:2017-02-02 09:32:00 【问题描述】:

我已将存储过程从 Sql Server 迁移到 mysql,并使用 phpmyadmin 例程 创建,语法没问题,但是当我执行存储过程时,不返回任何值。

DROP PROCEDURE `sp_buscar`; CREATE DEFINER=`root`@`localhost` PROCEDURE `sp_buscar`(IN `@buscar` VARCHAR(50) CHARSET utf8) NOT DETERMINISTIC NO SQL SQL SECURITY DEFINER

SELECT idColono AS Folio, nombreColono as Nombre, CONCAT(apellidoP ,' ', apellidoM) as Apellido,  CONCAT(domicilio,'  ', numero) as Dirección,  numeroTel AS Telefono 
FROM cColonos 
WHERE domicilio LIKE CONCAT (@buscar, '%')

在 Sql Server 中它可以正常工作。

CREATE PROC sp_buscar
@buscar VARCHAR(50)
AS
SELECT idColono AS Folio, nombreColono as Nombre, apellidoP +' '+ apellidoM as Apellido,  domicilio+'  '+ numero as Dirección,  numeroTel AS Telefono
FROM cColonos
WHERE domicilio LIKE  @buscar + '%'

怎么了?

【问题讨论】:

向你展示mysql存储过程而不是来自sql svr的过程 @Drew 第一个代码来自 Mysql,我使用了 phpmyadmin 的 Routines 工具。让我编辑一下。 【参考方案1】:

尝试删除concat之后的空格:

SELECT idColono AS Folio, nombreColono as Nombre,
       CONCAT(apellidoP ,' ', apellidoM) as Apellido,
       CONCAT(domicilio,'  ', numero) as Dirección,
       numeroTel AS Telefono 
FROM cColonos 
WHERE domicilio LIKE CONCAT(@buscar, '%');

MySQL 在函数名后有空格的解析问题。

这个相当不寻常的限制实际上是documented:

注意

默认情况下,函数名和函数名之间不能有空格 后面的括号。这有助于 MySQL 解析器区分 在函数调用和对发生的表或列的引用之间 与函数具有相同的名称。但是,函数周围的空间 参数是允许的。

还有一个允许空格的系统参数。

【讨论】:

仍然无法正常工作,即使我尝试了这个 WHERE domicilio LIKE @buscar,没有 CONCAT,也没有检索值,是的,该表有 500 条记录。无论如何,谢谢你。【参考方案2】:

解决方案!

DROP PROCEDURE `sp_buscar`; CREATE DEFINER=`root`@`localhost` PROCEDURE `sp_buscar`(IN `buscar` VARCHAR(50) CHARSET utf8) NOT DETERMINISTIC NO SQL SQL SECURITY DEFINER

SELECT idColono AS Folio, nombreColono as Nombre, 
       CONCAT(apellidoP ,' ', apellidoM) as Apellido,  
       CONCAT(domicilio,'  ', numero) as Dirección,  
       numeroTel AS Telefono 
FROM cColonos 
WHERE domicilio LIKE CONCAT(buscar, '%')

我刚刚从 buscar var 中删除了 @ 并且它有效!

【讨论】:

以上是关于MySQL存储过程没有值检索的主要内容,如果未能解决你的问题,请参考以下文章

PHP PDO / 从 MySQL 存储过程中检索 OUT 参数

如何使用 Dapper 检索存储过程的返回值

通过存储过程检索 Oracle 序列的下一个值

MySQL高级存储过程/函数/触发器

无法从 mysql 存储过程中看到任何值

在 PHP 上调用 MySQL 存储过程