Динамическое имя таблицы в триггере

295
05 декабря 2017, 18:42

Есть триггер, который копирует столбцы из одной таблицы в другую. Как присвоить имя таблицы динамической переменной @nametable? Каждый день имя таблицы меняется в зависимости от текущей даты.

Пробовал делать так:

USE dbo;
DROP TRIGGER IF EXISTS `update_test`;
GO
DELIMITER |
CREATE TRIGGER `update_test` AFTER INSERT ON `hello_send`
FOR EACH ROW
BEGIN
DECLARE nametable VARCHAR(128);
SET @nametable =(DATE_FORMAT(NOW(),"%d%m%Y_v"));
    INSERT INTO `dbo`.`nametable` SET
      `TIME_` =NEW.`recorded`,
      `P1` = NEW.`value1`
   ON DUPLICATE KEY UPDATE
        `TIME_` = NEW.`recorded`,
       `P1` = NEW.`value1`;
END;

Выдает ERROR 1146: Table 'dbo.nametable' doesn't exist.

Answer 1

Попробовал сделать внутри процедуры

    DROP PROCEDURE IF EXISTS dinamicTable;
DELIMITER $$  
CREATE PROCEDURE dinamicTable()
BEGIN
 SET @nametable =(DATE_FORMAT(NOW(),"%d%m%Y_v")); 
SET @stmt = CONCAT( 
'CREATE TRIGGER ''update_test' 
'AFTER INSERT ON' 'hello_send' 
'FOR EACH ROW
BEGIN
    INSERT INTO ',@nametable ,'SET' 'TIME_=NEW.recorded, P1 = NEW.value1' 'ON DUPLICATE KEY UPDATE' 'TIME_ = NEW.recorded, P1 = NEW.value1');
PREPARE stmt5 FROM @stmt;
EXECUTE stmt5;
DEALLOCATE PREPARE stmt5;

END$$
DELIMITER ; 

Получаю ошибку 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 ''update_testAFTER INSERT ONhello_sendFOR EACH ROW BEGIN INSERT INTO 04122017' at line 1 0.000 sec

Пожалуйста ткните носом как надо, SQL изучаю две недели и больше недели вожусь с данной, казалось бы банальной проблеммой. Вопрос? Если получится сделать в процедуре как тогда вызывать ее при добавлении новой строки в таблицу hello_send.

READ ALSO
Формат времени в MySql

Формат времени в MySql

Мне нужно получить формат времени так:

246
Преобразование даты в Unix (в SQL запросе)

Преобразование даты в Unix (в SQL запросе)

Есть множество решений как преобразовать дату формата unix в нормальный вид при запросе в базуНо вот ответа как сделать обратно я не нашел

374
За что отвечает ось “w” в Quaternion?

За что отвечает ось “w” в Quaternion?

Я заметил, что при создании нового объекта класса Quaternion в конце списка параметров есть параметр "w"За что он отвечает?

315
Свойства pubDate

Свойства pubDate

Решил вытянуть новости с определённой темы форума, что не составило трудаНо возник вопрос, как изменить свойство pubDate на 24х часовой формат

286