我想在MySQL中創建一個以列表爲參數的存儲過程。例如,假設我希望能夠在一次調用中爲一個項目設置多個標籤,那麼我想要做的是定義一個過程,該過程需要項目的ID和要設置的標籤列表。但是,我似乎無法找到任何方法來做到這一點,就我所知,沒有列表數據類型,但它可以被模擬嗎?請問標籤列表是逗號分隔的字符串,可以以某種方式拆分並循環播放?MySQL存儲過程中是否有任何列表數據類型,或者一種模擬它們的方式?
你通常如何處理MySQL存儲過程中的列表?
我想在MySQL中創建一個以列表爲參數的存儲過程。例如,假設我希望能夠在一次調用中爲一個項目設置多個標籤,那麼我想要做的是定義一個過程,該過程需要項目的ID和要設置的標籤列表。但是,我似乎無法找到任何方法來做到這一點,就我所知,沒有列表數據類型,但它可以被模擬嗎?請問標籤列表是逗號分隔的字符串,可以以某種方式拆分並循環播放?MySQL存儲過程中是否有任何列表數據類型,或者一種模擬它們的方式?
你通常如何處理MySQL存儲過程中的列表?
不知道這些是否可以專門在SP中工作,但在MySQL 5中有ENUM和SET數據類型可以滿足您的需求。 http://dev.mysql.com/doc/refman/5.0/en/enum.html http://dev.mysql.com/doc/refman/5.0/en/set.html
在我的選擇,C#的編程語言,我真正做到這一點的應用程序本身,因爲拆分()函數和循環是C#,然後SQL編程容易,但是!
也許你應該看看SubString_Index()函數。
例如,以下將返回谷歌:
SELECT SUBSTRING_INDEX(SUBSTRING_INDEX('www.google.com', '.', -2), '.', 1);
根據你想多麼複雜獲得,你可以使用一個通用的鏈接表。對於我的一個應用程序,用戶可能會選擇多個報告,例如客戶的列表以運行報告,而不是從組合框中選擇單個客戶。我有2場一個單獨的表:
的僞代碼如下所示:
GUID guid = GenerateGUID()
try
for each customer in customerList { INSERT(guid, customerId) }
ExecuteSQLPocedure(guid)
--the procedure can inner-join to the list table to get the list
finally
DELETE WHERE UniqueID=guid
枚舉和集合僅適用於字符串。枚舉只允許一個集合中的一個值,所以不要允許可變數量的值。我也懷疑SET數據類型必須在存儲過程中預定義,所以使用有限(並不是說我可以使它工作) – beldaz 2012-04-12 00:48:23