Как сделать update таблицы из триггера, если название колонки хранится в переменной?

Задача такая:
Есть таблица, в которой в виде object_id, property_id, value хранятся значения свойств.
Хочу при вставке нового значения и обновлении существующего, автоматически заполнять другую таблицу - object_id, property_1, property_2 и т.д.

Пробовал делать вот так:
DECLARE code VARCHAR(50);

# Здесь определяем code

PREPARE update_statement FROM 'UPDATE aggregated SET ? = ? WHERE id = ?';

SET @column = code;
SET @value = NEW.value;
SET @id = NEW.id;

EXECUTE update_statement USING @column, @value @id;

DEALLOCATE PREPARE update_statement;


Но использование динамических выражений в триггерах запрещено.

Есть вариант получать все значения всех свойств для объекта и через ад из условий выполнять один из запросов. Что-то вроде такого (это упрощенный псевдокод):
SELECT value INTO name_value FROM objects WHERE id = NEW.id AND property_code = 'name';
SELECT value INTO some_field_value FROM objects WHERE id = NEW.id AND property_code = 'some_field';
SELECT value INTO some_other_field_value FROM objects WHERE id = NEW.id AND property_code = 'some_other_field';

switch code
    case name
        name_value = NEW.value

    case some_field
        some_field_value = NEW.value

    case some_other_field
        some_other_field_value = NEW.value

UPDATE aggregated (name, some_field, some_other_field) VALUES (name_value, some_field_value, some_other_field_value)


Можно ли изящнее решить данную задачу?
  • Вопрос задан
  • 2454 просмотра
Пригласить эксперта
Ответы на вопрос 1
Vapaamies
@Vapaamies
Разработчик будущей ОС для ПК размером 250 МБ
Сделать представления и instead of-триггеры не получится? MySQL instead of-триггеры поддерживает?
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы