テーブルから名前を取得するストアド プロシージャ関数を作成しました。問題は、テーブル名をパラメーターとして渡す必要があることです (この関数を使用する必要があるテーブルがいくつかあります)。
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 は、ストアド関数またはトリガーでは許可されていません
代わりにプロシージャを使用しようとしましたが、関数のように単に値を返すようにすることはできませんでした。
それで、誰でもこの問題を回避する方法を見ることができますか?それは本当に信じられないほど基本的なようです。