如何将字符串作为 MySQL 参数传递给 IN 子句中使用的存储过程?

问题描述 投票:0回答:1

我有一个将参数传递给的过程:

CALL GetSelectedCodesCount('46.12', 'yes', 'uo');

它可以工作,但是我需要在第一个参数中传递几个不同的数值。 像这样:

CALL GetSelectedCodesCount(" '46.12' , '46.13' ", 'yes', 'uo');

由于这些参数随后落入 IN 样本中,我想传递正是这样的磁带。 我尝试了各种组合,包括发送参数。如果我只发送一个数值,一切正常,但如果超过一个,我会得到 0。

我的程序:

CREATE DEFINER=`***`@`%` PROCEDURE `database`.`GetSelectedCodesCount`(
    IN selectedCodes TEXT, 
    IN primaryCondition VARCHAR(50),
    IN tableName VARCHAR(50)
)
BEGIN
    DECLARE result INT;
    DECLARE result_uo INT;
    DECLARE result_fop INT;

    IF tableName = 'uo' THEN
        -- Performing selection for UO
        SELECT COUNT(*) INTO result_uo
        FROM table1 
        JOIN table2 ON table2.CODE = table1.CODE 
        JOIN table3 ON table3.RECORD = table2.RECORD 
        WHERE table1.CODE IN (selectedCodes) 
        AND table3.STAN = 'registered' 
        AND (primaryCondition IS NULL OR table2.PRIMARY = primaryCondition);

        SET result = result_uo;
    ELSEIF tableName = 'fop' THEN
        -- Performing selection for FOP
        SELECT COUNT(*) INTO result_fop
        FROM table1 
        JOIN table4 ON table4.CODE = table1.CODE 
        JOIN table5 ON table5.RECORD = table4.RECORD 
        WHERE table1.CODE IN (selectedCodes) 
        AND table5.STAN = 'registered' 
        AND (primaryCondition IS NULL OR table4.PRIMARY = primaryCondition);

        SET result = result_fop;
    ELSE
        -- Performing selection for both types 
        -- Selection for UO
        SELECT COUNT(*) INTO result_uo
        FROM table1 
        JOIN table2 ON table2.CODE = table1.CODE 
        JOIN table3 ON table3.RECORD = table2.RECORD 
        WHERE table1.CODE IN (selectedCodes) 
        AND table3.STAN = 'registered' 
        AND (primaryCondition IS NULL OR table2.PRIMARY = primaryCondition);

        -- Selection for FOP
        SELECT COUNT(*) INTO result_fop
        FROM table1 
        JOIN table4 ON table4.CODE = table1.CODE 
        JOIN table5 ON table5.RECORD = table4.RECORD 
        WHERE table1.CODE IN (selectedCodes) 
        AND table5.STAN = 'registered' 
        AND (primaryCondition IS NULL OR table4.PRIMARY = primaryCondition);

        -- Returning the sum of results
        SET result = result_uo + result_fop;
    END IF;

    SELECT result;
END

mysql mariadb
1个回答
0
投票

样品:

CREATE TABLE test 
SELECT 1 id, 123.456 val UNION ALL
SELECT 2, 234.567 UNION ALL
SELECT 3, 345.678;

CREATE PROCEDURE test (IN criteria TEXT)
SELECT *
FROM test
WHERE FIND_IN_SET(test.val, criteria);

CALL test('123.456,234.432,345.678');
id 瓦尔
1 123.456
3 345.678

小提琴

© www.soinside.com 2019 - 2024. All rights reserved.