универсальная хранимая процедура Mysql - PullRequest
0 голосов
/ 04 апреля 2010

У меня есть следующая хранимая процедура:

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'

Ответы [ 2 ]

2 голосов
/ 04 апреля 2010

Нельзя использовать переменную в качестве имени таблицы в 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//

Обратите внимание, что это будет медленнее.

0 голосов
/ 04 апреля 2010

Вы можете назвать это как get('user',1)?

IN tb VARCHAR(50) заставляет ожидать 'строку', вы передаете что-то, что синтаксический анализатор SQL интерпретирует как поле user, а это не известно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...