схемы и данные для тестовой базы данных - https://gist.github.com/koceg/435c0d2b1246a69d048fКак обновить таблицу из триггера, когда имя столбца является динамическим?
Моя цель состоит в том, чтобы обновить доски таблицы, когда кто-то вставляет новую строку в objects_properties таблицы. Имя столбца для обновления является динамическим - это зависит от property_id от objects_properties.
До сих пор я создал триггер и хранимую процедуру, но я получаю эту ошибку:
Dynamic sql is not allowed in stored function or trigger.
я делаю что-то неправильно или MySQL не позволяет вызвать хранимую процедуру с подготовленной утверждение внутри триггера? Если да, то как я могу делать то, что хочу?
У меня есть идея, но она уродлива даже в псевдокоде. Реальный SQL будет еще хуже, потому что будет несколько десятков кодов:
SWITCH (property_code)
CASE 'name'
INSERT INTO boards (id, name) VALUES (@object_id, @value) ON DUPLICATE KEY UPDATE name = @value;
CASE 'address'
INSERT INTO boards (id, address) VALUES (@object_id, @value) ON DUPLICATE KEY UPDATE address = @value;
CASE 'district'
INSERT INTO boards (id, district) VALUES (@object_id, @value) ON DUPLICATE KEY UPDATE district = @value;
P.S. Я не могу переместить эту логику в свое приложение, потому что эта база данных используется несколькими приложениями.
Это плохо спроектированная схема, но я ничего не могу с этим поделать ... –
Согласно документации MySQL: [D.1 Ограничения на сохраненные программы] (http://dev.mysql.com/doc/refman /5.6/en/stored-program-restrictions.html): «SQL подготовленные заявления ([PREPARE]» (http://dev.mysql.com/doc/refman/5.6/en/prepare.html), [EXECUTE] (http://dev.mysql.com/doc/refman/5.6/en/execute.html), [DEALLOCATE PREPARE] (http://dev.mysql.com/doc/refman/5.6/en/deallocate-prepare. html)) можно использовать в хранимых процедурах, но не в хранимых функциях или триггерах. Таким образом, хранимые функции и триггеры не могут использовать динамический SQL (где вы строите операторы как строки и затем выполняете их). ". – wchiquito
Некоторые параметры. Не используйте триггеры для использования Подготовленных утверждений или используйте триггеры без использования подготовленных выражений. – wchiquito