Mysql Переменные в SQL-коде при описании триггера

xintrea

Новичок
Здравствуйте!


Я пользую БД крайне редко, посему прошу прощения за нубский вопрос.

Есть у меня в MySQL триггер, при создании которого три раза приходится указывать имя таблицы.

Я бы хотел это имя таблицы поместить в переменную и подставлять его.

Вот как сейчас выглядит код триггера (пользуюсь SqlYog):

Код:
DELIMITER $$
USE `site`$$
DROP TRIGGER /*!50032 IF EXISTS */ `on_add_article`$$
CREATE
  /*!50017 DEFINER = 'root'@'localhost' */
  TRIGGER `on_add_article` BEFORE INSERT ON `lt_articles`
FOR EACH ROW BEGIN
SET @row_count = ( SELECT COUNT(*) FROM `lt_articles` );
IF ( @row_count = 0 ) THEN
SET NEW.sort_order=1;
ELSE
SET @max_number = ( SELECT MAX(sort_order) FROM `lt_articles` );
SET NEW.sort_order=@max_number+1;
END IF;
END;
$$
DELIMITER ;
Видно, что имя таблицы `lt_articles` встречается в этом коде 3 раза.

Я попытался перед строкой с USE прописать команду:

Код:
SET @table_name = `lt_articles`$$
и везде вместо `lt_articles` написал @table_name. Однако триггер не применяется, выдается ошибка:

Код:
Query: SET @table_name = `lt_articles`

Error Code: 1054
Unknown column 'lt_articles' in 'field list'
Пробовал без @, тоже ошибка в момент создания переменной, но другая:

Код:
Unknown system variable 'table_name'
Пробовал через DECLARE (с @ и без):

Код:
DECLARE table_name VARCHAR(100) DEFAULT `lt_articles`$$
Тоже имею ошибку:

Код:
Error Code: 1064
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'DECLARE table_name VARCHAR(100) DEFAULT `lt_articles`' at line 1
В общем, никак не получается тупо заменить magic-строки в коде на переменную. Подозреваю, что тут есть какое-то ограничение на встраиваемые процедуры, и максимум, что можно сделать - это добавить переменную в блоке BEGIN-END. Но у меня имя таблицы есть и за блоком. Получается, что задача вообще не имеет решения?
 

AnrDaemon

Продвинутый новичок
Потому что надо объявлять переменную ВНУТРИ триггера.
То, что ЗА блоком, к триггеру никак не относится вообще.
 

WMix

герр M:)ller
Партнер клуба
там ограничение на использование имени таблицы
 
Сверху