2013-04-25 89 views
1

我寫了這個功能:MySQL的 - 函數返回執行值

delimiter // 

CREATE FUNCTION randomDefVal(val varchar(30), tableName varchar(30)) 
    returns varchar(30) 

    BEGIN 

     SET @query = concat('SELECT ',val,' FROM ',tableName,' ORDER BY rand() LIMIT 1;'); 
     SET @result = NULL; 
     PREPARE stmt1 FROM @query; 
     return (EXECUTE stmt1); 

    END// 

但我必須在最後一行的錯誤:

SQL Error (1336): Dynamic SQL is not allowed in stored function or trigger 

這表明,我不能寫「回報(EXECUTE stmt1 );」 如何返回值,這將是'EXECUTE'語句的結果?

+0

我得到這個錯誤:**'SQL錯誤(1336):動態SQL不允許在存儲函數或觸發器**中 – hjpotter92 2013-04-25 18:47:42

回答

1

我想你想要的是SELECT ... INTO。所以,你將有你的BEGINEND內是這樣的(注意,我沒有測試此代碼):

BEGIN 
    DECLARE var_name VARCHAR(30); 
    SET var_name = ''; 
    SELECT val INTO var_name FROM tableName ORDER BY rand() LIMIT 1; 
    RETURN var_name; 
END