如何在mysql过程中生成动态where条件
我在mysql中创建了一个存储过程,它接受2个参数,但参数可以为null,因此基于该参数值,我希望生成动态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
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 ;