通用的Mysql存储过程

时间:2010-04-04 17:58:03

标签: mysql sql mysql-error-1054

我有以下存储过程:

CREATE PROCEDURE `get`(IN tb VARCHAR(50), IN id INTEGER)
BEGIN
    SELECT * FROM tb  WHERE Indx = id;
END//

当我打电话给get(用户,1)时,我得到以下内容:

ERROR 1054 (42S22): Unknown column 'user' in 'field list'

2 个答案:

答案 0 :(得分: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//

但请注意,这会慢一些。

答案 1 :(得分:0)

你能称之为get('user',1)吗?

IN tb VARCHAR(50)使它期望一个'字符串',你传递的东西是SQL解析器解释为字段user而且不知道。