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

时间:2017-02-22 05:33:57

标签: mysql stored-procedures

我在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 ;

1 个答案:

答案 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命令执行它。希望这会有帮助。