0

次のストアド プロシージャがあります。

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'
4

2 に答える 2

2

変数は、プロシージャのコンパイル時にコンパイルされるため、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//

ただし、これは遅くなることに注意してください。

于 2010-04-04T18:09:56.873 に答える
0

あなたはそれを次のように呼ぶことができますget('user',1)か?

IN tb VARCHAR(50)「文字列」を期待させます。SQLパーサーがフィールドとして解釈するものを渡していますがuser、それはわかりません。

于 2010-04-04T18:00:54.237 に答える