2009-07-23 86 views
1

我無法使用MySQL 5.x進行此項工作。這個函數應該返回select語句中所有相關的行:MySQL創建函數不會返回集

CREATE FUNCTION getuids(root INT) 
RETURNS SET OF INT AS $$ 
BEGIN 
RETURN SELECT uid FROM pages WHERE deleted = 0 
END 
$$ LANGUAGE 'SQL'; 

任何想法我做錯了什麼?

回答

4

MySQL函數可能不會返回MySQL中的一行或一組行。只有存儲過程才能返回行。這在MySQL 5.4中也是如此。請參閱Limitations頁面。將存儲過程用作查詢中的表或where子句值也是不可用的。

樣,如果你需要使用的功能,你能做的最好是使用GROUP_CONCAT得到的值到逗號分隔的列表:

CREATE FUNCTION getuids() RETURNS VARCHAR(1024) 
BEGIN 
SELECT GROUP_CONCAT(uid SEPARATOR ',') INTO @uid_list FROM pages WHERE deleted = 0; 
RETURN @uid_list; 
END 

然後在你的SELECT語句需要檢查的UID ,您可以使用如下所示的FIND_IN_SET功能:

SELECT ... WHERE FIND_IN_SET(my_field, get_uids()); 

PS我最初在MySQL網站上發佈了鏈接到GROUP_CONCAT和FIND_IN_SET函數,但Stack Overflow只允許我使用一個鏈接。耶因爲新的。