MySQL хранимая процедура динамического изменения имени таблицы - PullRequest
3 голосов
/ 08 сентября 2010

Я хочу динамически изменить имя таблицы в SQL-запросе. Например, у меня есть следующая хранимая процедура:

CREATE PROCEDURE NewProc(IN tableName varchar(64),IN message text)
BEGIN
    INSERT INTO tableName VALUES (message);
END;

Мне нужно изменить tableName во время выполнения. Могу ли я это сделать или нет? Спасибо.

1 Ответ

0 голосов
/ 08 сентября 2010

Вы должны использовать динамический SQL, чтобы подготовить и выполнить строку SQL, чтобы достичь того, что вы описываете.

Имена динамических таблиц (или имена столбцов, или ключевые слова SQL и т. Д.) Должны быть интерполированы в строку SQL перед подготовкой. Вы не можете использовать параметры запроса для этих динамических элементов.

Будьте осторожны, чтобы избежать уязвимостей SQL-инъекций при интерполяции имени таблицы в ваш SQL-запрос. Например, вы должны проверить, что имя таблицы существует, просмотрев его в информационной схеме .

Я согласен с комментарием @OMG Ponies - это запах кода , что у вас есть несколько таблиц с одинаковой структурой, так что вы хотите сделать одну и ту же вставку в один и тот же столбец. Запахи кода не гарантируют, что у вас плохой дизайн, но это стоит учитывать.

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