【发布时间】:2021-02-09 13:56:21
【问题描述】:
我需要编写一个触发器来更新另一个表中的记录。表名是动态的。
我创建的触发器如下所示:
BEGIN
if new.status = 1 then
UPDATE NEW.tablename SET f1 = NULL WHERE id_ = old.pid;
END if;
END
但是更新sql无法运行
有人可以帮我处理一下这里的 SQL 吗?
【问题讨论】:
我需要编写一个触发器来更新另一个表中的记录。表名是动态的。
我创建的触发器如下所示:
BEGIN
if new.status = 1 then
UPDATE NEW.tablename SET f1 = NULL WHERE id_ = old.pid;
END if;
END
但是更新sql无法运行
有人可以帮我处理一下这里的 SQL 吗?
【问题讨论】:
您不能将列值用作表名。只有动态 SQL 可以 - 但在触发器中是不允许的。
执行任务的唯一可见方式是
BEGIN
if new.status = 1 then
CASE NEW.tablename WHEN 'table1'
THEN UPDATE table1 SET f1 = NULL WHERE id_ = old.pid;
WHEN 'table2'
THEN UPDATE table2 SET f1 = NULL WHERE id_ = old.pid;
...
END CASE;
END if;
END
【讨论】: