如何在mysql过程中生成动态where条件

如何在mysql过程中生成动态where条件,mysql,stored-procedures,Mysql,Stored Procedures,我在mysql中创建了一个存储过程,它接受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 ; 但在上面的存储过程中,问题是PID或PName,其中一个或两个都可能为Nu

我在mysql中创建了一个存储过程,它接受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 ;
但在上面的存储过程中,问题是PID或PName,其中一个或两个都可能为Null,在这种情况下,我应该在where条件下写什么? 我试过这样做

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 ;
试一下上面的代码。我提到过使用PREPARE语句进行动态查询,并使用Execute命令执行它。希望这会有所帮助

请尝试上面的代码。我提到过使用PREPARE语句执行动态查询,并使用Execute命令执行它。希望这会有所帮助。

它显示了一个错误,如“您的SQL语法有错误;请查看与您的MariaDB服务器版本对应的手册,以了解在“WhereCondition=”1=1“附近使用的正确语法;如果为null(PID)”)如果第12行的“相同错误”错误代码为空,则错误代码为:1064您的SQL语法有错误;请查看与您的MariaDB服务器版本对应的手册,以了解在“WhereCondition=“1=1”附近使用的正确语法;如果第12行的“ELSEIF NULLIF(PID)”,则错误代码为空,如“您的SQL语法有错误;检查与您的MariaDB服务器版本对应的手册,以了解在“WhereCondition=“1=1”附近使用的正确语法;如果NULLIF(PID“”)为NULL,则第12行的WhereCo“相同错误”错误代码为:1064您的SQL语法有错误;检查与您的MariaDB服务器版本对应的手册,以了解在“WhereCondition=“1=1”附近使用的正确语法;ELSEIF NULLIF(PID“”)在“第12行”时为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 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 ;