测试数据库的模式和数据 - https://gist.github.com/koceg/435c0d2b1246a69d048f
当有人在 objects_properties 表中插入新行时,我的目标是更新 board 表。要更新的列的名称是动态的 - 它取决于 objects_properties 中的 property_id 。
到目前为止,我已创建了触发器和存储过程,但我收到此错误:
存储函数或触发器中不允许使用动态sql。
我是做错了还是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。我无法将此逻辑移至我的应用程序,因为该数据库已被多个应用程序使用。
答案 0 :(得分:2)
当前MySQL(5.7)手册部分D.1对存储程序的限制声明
问候。