xintrea
Новичок
Здравствуйте!
Я пользую БД крайне редко, посему прошу прощения за нубский вопрос.
Есть у меня в MySQL триггер, при создании которого три раза приходится указывать имя таблицы.
Я бы хотел это имя таблицы поместить в переменную и подставлять его.
Вот как сейчас выглядит код триггера (пользуюсь SqlYog):
Видно, что имя таблицы `lt_articles` встречается в этом коде 3 раза.
Я попытался перед строкой с USE прописать команду:
и везде вместо `lt_articles` написал @table_name. Однако триггер не применяется, выдается ошибка:
Пробовал без @, тоже ошибка в момент создания переменной, но другая:
Пробовал через DECLARE (с @ и без):
Тоже имею ошибку:
В общем, никак не получается тупо заменить magic-строки в коде на переменную. Подозреваю, что тут есть какое-то ограничение на встраиваемые процедуры, и максимум, что можно сделать - это добавить переменную в блоке BEGIN-END. Но у меня имя таблицы есть и за блоком. Получается, что задача вообще не имеет решения?
Я пользую БД крайне редко, посему прошу прощения за нубский вопрос.
Есть у меня в 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 ;
Я попытался перед строкой с USE прописать команду:
Код:
SET @table_name = `lt_articles`$$
Код:
Query: SET @table_name = `lt_articles`
Error Code: 1054
Unknown column 'lt_articles' in 'field list'
Код:
Unknown system variable 'table_name'
Код:
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