Суть задачи — если что-то изменилось в рядке — записать старые и новые значения в другую таблицу (для того чтобы лог вести изменений).
Возможно ли сделать что-то автоматизированное и не хардкодить названия колонок?
Прямо сейчас вот такой код:
CREATE TRIGGER rates_change
AFTER UPDATE ON duty_rates
FOR EACH ROW
BEGIN
DECLARE done INT default 0;
DECLARE every_column_name varchar(4000);
DECLARE cur1 CURSOR FOR select column_name from information_schema.columns where TABLE_SCHEMA='rates_database' and table_name='duty_rates';
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;
OPEN cur1;
REPEAT
FETCH cur1 INTO every_column_name;
IF NOT done THEN
-- тут иф с проверкой изменилось ли значение для колонки, название которой every_column_name
INSERT INTO log_rates_changes -- дальше автоматизировать бы
END IF;
UNTIL done END REPEAT;
CLOSE cur1;
END;
Т.е. перебираю все колонки, которые есть в структуре, однако к OLD и NEW доступиться никак не получается, и есть подозрение, что не получится.
Пробовал через «PREPARE stmt» — пишет ошибку, что нельзя динамический SQL в триггере выполнять. Если даже в процедуру разместить и вызвать её из триггера — говорят будет тоже самое.