首页 > 解决方案 > 具有多个可选参数的 MySQL 存储过程

问题描述

我正在尝试创建一个具有多个可选参数的存储过程,我尝试过使用 IF 语句,但我无法使其工作,这是我尝试过的最后一个代码。

如果“Usuario”不为空,我想按“Usuario”过滤,我以“Usuario”为例,但它会有其他类似的过滤器。

CREATE DEFINER=`conciliacion`@`%` PROCEDURE `BuscarRRNormal`(IN `FechaDesde` DATE, IN `FechaHasta` DATE, IN `Usuario` varchar(255))
BEGIN

SELECT IDS, Fecha_Recarga, Usuario, Monto, Operador
FROM transaccionesrr
WHERE (Fecha_Recarga BETWEEN FechaDesde AND FechaHasta) 
AND (@Usuario IS NULL OR Usuario = @Usuario);

END

似乎 mySQL 不支持可选参数,但可能有类似的选项?任何帮助将不胜感激。

标签: mysqlvariablesstored-procedures

解决方案


在 MySQL 中,变量@Usario与过程 IN 参数不是同一个对象Usario。它们是不同的变量。您不能通过引用@Usario来获取 IN 参数的值Usario

您应该将参数命名为与要与之比较的列名不同的名称,然后在查询中使用它而不使用@字符。例如,可以使用命名约定为参数名称添加前缀“p”。

CREATE DEFINER=`conciliacion`@`%` PROCEDURE `BuscarRRNormal`(IN `pFechaDesde` DATE, IN `pFechaHasta` DATE, IN `pUsuario` varchar(255))
BEGIN

SELECT IDS, Fecha_Recarga, Usuario, Monto, Operador
FROM transaccionesrr
WHERE (Fecha_Recarga BETWEEN pFechaDesde AND pFechaHasta) 
AND (pUsuario IS NULL OR Usuario = pUsuario);

END

推荐阅读