【问题标题】:How Get result From Null parameter value in dynamic MYSQL stored procedure如何从动态MYSQL存储过程中的Null参数值获取结果
【发布时间】:2017-06-22 08:17:58
【问题描述】:

我有表名 table_abc 它包含列 name varchar(255) NOT NULL,store_id INT(11) NOT NULL,brand varchar(255) NOT NULL,status INT(11) NOT NULL

表-

 name   | store_id  | brand |       status
    dress      1         only           1
    dress      2        vero moda       1
    dress      2         ZARA           1
    dress      2        vero moda       1
    dress      3         only           1
    dress      3        vero moda       1
    dress      1         only           1
    dress      2        ZARA            1

现在我想要动态结果,如果在参数中传递 NULL 或空 '' 值,那么它可以将该特定参数的整行作为结果。例如:

 delimiter //
    DROP PROCEDURE IF EXISTS sp_test//
    CREATE PROCEDURE sp_test(
    list_of_name VARCHAR(255), 
    list_of_ids VARCHAR(100), 
    list_of_brand VARCHAR(100) )
    BEGIN
         SET @query := CONCAT("SELECT name,store_id,brand,status FROM `table_abc`  
    WHERE name in (" , list_of_name ,") AND status='1' 
    AND store_id in (" , list_of_ids OR list_of_ids IS NULL, ")
     AND brand in (" , list_of_brand , ") 
     ORDER BY RAND() LIMIT 0,16");
         PREPARE stmt FROM @query;
         EXECUTE stmt;
         DEALLOCATE PREPARE stmt;
         END//
         delimiter ;

我们尝试使用空值参数获取结果。但是 store_id 不能在这个过程中工作。或 null 也不起作用。 请帮忙

  • mysql> call sp_test("'dress'",'1,2,3',"'only','vero moda','ZARA'");
  • mysql> call sp_test("'dress'",null,"'only','vero moda','ZARA'");
  • mysql> call sp_test("'dress'",'null',"'only','vero moda','ZARA'");

【问题讨论】:

  • store_id 的类型是 INT、CHAR 还是 VARCHAR?
  • @KeyurPanchal name varchar(255),store_id INT(11),brand varchar(255),status INT(11) 。先生类型已在描述中定义

标签: mysql sql


【解决方案1】:

试试这样的(我没有测试过脚本,所以你可能需要稍微调整一下)

 delimiter //
    DROP PROCEDURE IF EXISTS sp_test//
    CREATE PROCEDURE sp_test(
    list_of_name VARCHAR(255), 
    list_of_ids VARCHAR(100), 
    list_of_brand VARCHAR(100) )
    BEGIN
         SET @query := CONCAT("SELECT name,store_id,brand,status FROM `table_abc`  
    WHERE name in (" , list_of_name ,") AND status='1' 
     + CASE WHEN ISNULL(list_of_ids,'') <> '' THEN "AND store_id in (" + list_of_ids + ") 
     AND brand in (" , list_of_brand , ") 
     ORDER BY RAND() LIMIT 0,16");
         PREPARE stmt FROM @query;
         EXECUTE stmt;
         DEALLOCATE PREPARE stmt;
         END//
         delimiter ;

【讨论】:

  • thanxs 和先生如何调用程序请告诉我,意思是如何在参数中定义 null 或空
  • 您可以直接将 null 发送到 SP .. Exec MySP 'abc',null,'efg' 或者您可以查看更多详细信息stackoverflow.com/questions/30194414/…
  • 未知列或数据类型
猜你喜欢
  • 1970-01-01
  • 2010-10-24
  • 1970-01-01
  • 2021-03-27
  • 2012-07-26
  • 1970-01-01
  • 2014-10-14
  • 2011-07-24
  • 2016-03-27
相关资源
最近更新 更多