2
我在mysql中編寫了一個過程,它從表中返回一個隨機值。但是我有很多表,並且我想多次使用這個過程,所以我添加了作爲過程參數名稱表,從中我想要rand值,我將傳遞給過程的名稱也作爲參數:MySQL - 如何存儲執行結果
delimiter //
CREATE PROCEDURE randomDefVal(val varchar(50), tableName varchar(50),OUT randomVal varchar(50))
BEGIN
SET @tmpTableName = tableName;
SET @sql_querry = concat('SELECT',@tmpVal,'FROM',@tmpTableName,'ORDER BY rand() LIMIT 1');
PREPARE stmt FROM @sql_text;
EXECUTE stmt using @randomVal;
DEALLOCATE PREPARE stmt;
END
但是當我運行這段代碼我有一個錯誤:
Error Code: 1064. You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'NULL' at line 1
任何人能解釋我怎麼能我的EXECUTE
結果存儲在一個變量?
// SOLUTION
對於這些人如何有同樣的問題,因爲我有,我想表明我已經做出了表率的解決方案:
delimiter //
CREATE PROCEDURE tmpProcedure(tableName varchar(20))
BEGIN
DECLARE my_query varchar(60);
DECLARE value varchar(20);
SET @my_query = concat('Select Name FROM ',tableName,' ORDER BY rand() LIMIT 1 INTO @outvar');
PREPARE stmt from @my_query;
EXECUTE stmt;
SET val = (SELECT @outvar);
END//
我希望這將是對你有幫助。
我看到我犯了什麼錯誤。但是我一直都有同樣的錯誤。也許我稱這個程序不正確。我只是做了'CALL randomDefVal('xyz','abc',@ randomVal)。我應該如何糾正這個過程的調用,以及如何正確訪問randomVal中存儲執行結果的randomVal? – Ziva 2013-04-22 11:23:08