我正在尝试制作一个包含多个选项参数的存储过程,我已尝试使用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不支持可选参数,但可能有类似的选项?任何帮助将不胜感激。
答案 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