MySQL 存储过程使用 IN 应用过滤器并且过滤器值来自参数

MySQL Stored Procedured apply filter using IN and the filter value is coming from a parameter

如标​​题所述,我在使用 MySQL 存储过程中的运算符 (IN) 对查询结果应用简单过滤器时遇到问题。

存储过程的简单示例如下所示

DELIMITER $$
DROP PROCEDURE IF EXISTS `sp_example`$$

CREATE DEFINER=`root`@`localhost` PROCEDURE `sp_example`(
    `filter_uid_value` TEXT
)
BEGIN

SELECT
    a.id
    , a.name
    , a.uid
FROM
    employee_example a
WHERE 1=1
    AND a.uid IN (filter_uid_value)

END$$
DELIMITER;

所以当我调用这个存储过程时,例如像这样

CALL sp_example("du4jgjVRJGs,oKxU3SzV8CK");

过滤器不适用,我想知道如何解决这个问题

CREATE DEFINER=`root`@`localhost` PROCEDURE `sp_example`(
    `filter_uid_value` TEXT
)
SELECT id, name, uid
FROM employee_example
WHERE FIND_IN_SET(uid, filter_uid_value);

不需要DELIMITER。


DELIMITER ;;

CREATE DEFINER=`root`@`localhost` PROCEDURE `sp_example`(
    `filter_uid_value` TEXT
)
BEGIN
SET @sql := CONCAT( 'SELECT id, name, uid ',
                    'FROM employee_example ',
                    'WHERE uid IN ("',
                    REPLACE(filter_uid_value, ',', '","'),
                    '")' );
PREPARE stmt FROM @sql;
EXECUTE stmt;
DROP PREPARE stmt;
END;;

DELIMITER ;