在下面的过程中,我有两个参数-运行时应同时填写两个参数。
我希望这些参数是可选的,如果我填充第一个数据应该在一个参数的基础上进行过滤(如果我填充第二个参数,并且将其保留为空),则第一个数据应该在第二个参数的基础上进行过滤,如果我同时传递了这两个参数,则应该基于这两个参数,如果我没有传递参数,则不应进行过滤。
DROP PROCEDURE IF EXISTS medatabase.SP_rptProvince2;
CREATE PROCEDURE medatabase.`SP_rptProvince2`(
IN e_Region VARCHAR(500),
IN e_Province VARCHAR(500)
)
BEGIN
DECLARE strQuery VARCHAR(1024);
DECLARE stmtp VARCHAR(1024);
SET @strQuery = CONCAT('SELECT * FROM alldata where 1=1 ');
-- IF e_region IS NOT NULL THEN
-- SET @strQuery = CONCAT(@strQuery, 'AND regionName'=e_Region);
-- END IF;
IF e_Region IS NOT NULL THEN
SET @strQuery = CONCAT(@strQuery, ' AND regionName = "',e_Region,'"');
IF e_Province IS NOT NULL THEN
SET @strQuery = CONCAT(@strQuery, ' AND provinceName = "',e_Province,'"');
END IF;
END IF;
PREPARE stmtp FROM @strQuery;
EXECUTE stmtp;
End;
最佳答案
MySQL过程不支持可选参数。您必须做您当前正在做的事情(传入并测试NULL
)。