具有多个可选参数的MySQL存储过程

时间:2018-05-13 15:58:44

标签: mysql variables stored-procedures

我正在尝试制作一个包含多个选项参数的存储过程,我已尝试使用IF语句,但我无法使其工作,这是我尝试过的最后一个代码。

我希望过滤" Usuario"如果它不是null 我给了" 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不支持可选参数,但可能有类似的选项?任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

在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