我有一个将参数传递给的过程:
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
样品:
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 |