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

jw5wzhpr  于 2021-06-21  发布在  Mysql
关注(0)|答案(1)|浏览(434)

我正在尝试制作一个具有多个optionals参数的存储过程,我尝试了if语句,但无法使其工作,这是我最后尝试的代码。
我想通过“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似乎不支持可选参数,但也可能有类似的选项?。任何帮助都将不胜感激。

hfwmuf9z

hfwmuf9z1#

在mysql中,变量 @Usario 与参数中的过程不是同一个对象 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

相关问题