我正在嘗試編寫MySql函數,我在select語句中使用了表名,這是一個解釋我面臨的問題的玩具代碼[注意:我不想使用程序!]傳遞列名作爲MySql函數的參數
DROP FUNCTION IF EXISTS `P_AVG`;
DELIMITER $$
CREATE FUNCTION P_AVG(tblName CHAR(64)) RETURNS INT
BEGIN
DECLARE cnt INT;
SELECT COUNT(*) INTO cnt FROM tblName;
return cnt;
END$$
DELIMITER ;
然後我嘗試執行以下
SELECT P_AVG("PARTSUPP");
我收到以下錯誤
ERROR第1146(42S02) :表'phpmyadmin.tblName'不存在
它生成以下錯誤ERROR 1064(42000):你在你的SQL語法錯誤;查看與您的MySQL服務器版本相對應的手冊,以找到在'DYNAMIC_QUERY;'附近使用的正確語法。 –
o.O another:錯誤1336(0A000):動態SQL不允許在存儲函數或觸發器中 –
然後,您需要將其作爲存儲過程編寫。一個'PROCEDURE'而不是'FUNCTION'。 – SarathChandra