次のストアド プロシージャがあります。
CREATE PROCEDURE `get`(IN tb VARCHAR(50), IN id INTEGER)
BEGIN
SELECT * FROM tb WHERE Indx = id;
END//
get(user,1) を呼び出すと、次のようになります。
ERROR 1054 (42S22): Unknown column 'user' in 'field list'
次のストアド プロシージャがあります。
CREATE PROCEDURE `get`(IN tb VARCHAR(50), IN id INTEGER)
BEGIN
SELECT * FROM tb WHERE Indx = id;
END//
get(user,1) を呼び出すと、次のようになります。
ERROR 1054 (42S22): Unknown column 'user' in 'field list'
変数は、プロシージャのコンパイル時にコンパイルされるため、SQL でテーブル名として使用することはできません。準備済みステートメントを使用してみてください。
CREATE PROCEDURE `get`(IN tb VARCHAR(50), IN id INTEGER)
BEGIN
PREPARE stmt1 FROM CONCAT('SELECT * FROM ', tb, ' WHERE Indx = id');
EXECUTE stmt1;
DEALLOCATE PREPARE stmt1;
END//
ただし、これは遅くなることに注意してください。
あなたはそれを次のように呼ぶことができますget('user',1)
か?
IN tb VARCHAR(50)
「文字列」を期待させます。SQLパーサーがフィールドとして解釈するものを渡していますがuser
、それはわかりません。