【发布时间】:2013-05-03 12:26:42
【问题描述】:
假设我有一个触发器函数,但它的代码非常复杂,将它拆分为更多的过程会很方便。我想在所有这些变量中使用 NEW(或 OLD 用于 UPDATE/DELETE 触发器)变量。除了将它作为函数参数发送给从原始触发函数调用的每个过程之外,还有其他选择吗?
【问题讨论】:
标签: postgresql stored-procedures triggers
假设我有一个触发器函数,但它的代码非常复杂,将它拆分为更多的过程会很方便。我想在所有这些变量中使用 NEW(或 OLD 用于 UPDATE/DELETE 触发器)变量。除了将它作为函数参数发送给从原始触发函数调用的每个过程之外,还有其他选择吗?
【问题讨论】:
标签: postgresql stored-procedures triggers
如果您真的需要传递它们,我很确定您可以通过适当键入的记录(例如 newrow tablename%ROWTYPE)来传递它们。
http://www.postgresql.org/docs/current/static/plpgsql-declarations.html
也就是说,除非您运行大型查询,其结果会在整个触发器函数中使用,否则将触发器分成更小的部分通常比调用子函数更干净。请注意,您可以有条件地执行触发器,例如:
create trigger "01_do_stuff_upd" on update after tablename
for each row
when (old.field <> new.field and ...)
execute procedure do_stuff_upd_part_01();
执行上述操作时要牢记的是,在 Postgres 中(与 sql 规范相反),触发器按字母顺序执行,而不是按创建顺序执行。
【讨论】: