2017-06-22 11 views
0

空參數值我有表名table_abc它包含coloumns name varchar(255) NOT NULL,store_id INT(11) NOT NULL,brand varchar(255) NOT NULL,status INT(11) NOT NULL如何獲取導致動態MySQL存儲過程

表 -

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或空''值,那麼它可以給particuler參數作爲結果的完整行。例如:

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 ; 

我們試圖用null值參數得到結果。但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'");
+1

什麼是store_id- INT,CH的類型AR或VARCHAR? –

+0

@KeyurPanchal name varchar(255),store_id INT(11),brand varchar(255),狀態INT(11)。先生類型已定義 –

回答

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 ; 
+0

thanxs和先生如何調用程序請告訴我,意味着如何在參數中定義空或空 –

+1

您可以直接向SP發送null .. Exec MySP'abc',null,' efg'或者你可以看到更多的細節https://stackoverflow.com/questions/30194414/mysql-how-to-pass-null-parameter-into-stored-procedure-and-test-for-it-in-sql- st – asmgx

+0

你得到的錯誤是什麼,或者結果是什麼? – asmgx