我在mysql中创建了一个Store程序,它接受2个参数但参数可以为null所以基于该参数值我想生成动态where条件
DELIMITER$$
CREATE PROCEDURE GetValue(IN PID INT,IN PName VARCHAR(255))
BEGIN
SELECT *
FROM tblTEMP
WHERE ID= PID AND NAME=;
END$$
DELIMITER ;
但是在上面的Store程序问题是PID或PName中的一个或两个都可能在这种情况下为Null我应该在哪里写条件? 我试过这个
DELIMITER$$
CREATE PROCEDURE GetValue(IN PID INT,IN PName VARCHAR(255))
BEGIN
DECLARE WhereCondition VARCHAR(300);
IF NULLIF(PID, '') IS NULL AND NULLIF(PName , '') IS NULL
WhereCondition = "1=1";
IF NULLIF(PID, '') IS NULL
WhereCondition = "NAME=PName";
IF NULLIF(PName, '') IS NULL
WhereCondition = "ID=PID";
SELECT *
FROM tblTEMP
WHERE WhereCondition ;
END$$
DELIMITER ;
答案 0 :(得分:2)
DELIMITER $$
CREATE PROCEDURE GetValue(IN PID INT,IN PName VARCHAR(255))
BEGIN
DECLARE WhereCondition VARCHAR(300);
IF NULLIF(PID, '') IS NULL AND NULLIF(PName , '') IS NULL THEN
SET WhereCondition = '1=1';
ELSEIF NULLIF(PID, '') IS NULL THEN
SET WhereCondition = 'NAME=PName';
ELSEIF NULLIF(PName, '') IS NULL THEN
SET WhereCondition = 'ID=PID';
END IF;
SET @query =CONCAT("SELECT * FROM tblTEMP ",WhereCondition);
PREPARE stmt FROM @query;
EXECUTE stmt;
END$$
DELIMITER ;
试试上面的代码。我提到了使用PREPARE语句的动态查询,并使用Execute命令执行它。希望这会有帮助。