我寫過一個存儲過程函數來從表中獲取名稱。麻煩的是,我想作爲參數傳遞的表名(有幾個不同的表,我需要使用該功能):存儲過程函數中的動態表名
DELIMITER $$
CREATE DEFINER=`root`@`localhost` FUNCTION `getName`(tableName VARCHAR(50), myId INT(11)) RETURNS VARCHAR(50)
begin
DECLARE myName VARCHAR(50);
SELECT
'name' INTO myName
FROM
tableName
WHERE
id=myId;
RETURN myName;
end
,因爲它使用的變量名這種方法有一個錯誤「 tableName「而不是變量的實際值。
我可以解決此問題在程序使用CONCAT
這樣的:
SET @GetName = CONCAT("
SELECT
'name'
FROM
",tableName,"
WHERE
id=",myId,";
");
PREPARE stmt FROM @GetName;
EXECUTE stmt;
...但是,當我嘗試做一個功能我得到一個消息說:
動態SQL沒有包括在存儲函數或觸發允許
我試圖用程序取而代之,但我無法讓它只返回一個值,就像一個函數一樣。
所以,任何人都可以看到一種方法來解決這個問題。它真的非常基礎。
如何使用'OUT'或'INOUT'參數覆蓋您的返回值? – eisberg