3

假设我有一个触发器函数,但它的代码非常复杂,将它拆分为更多过程会很方便。我想在所有这些变量中使用 NEW(或 OLD 用于 UPDATE/DELETE 触发器)变量。除了将其作为函数参数发送到从原始触发器函数调用的每个过程之外,还有其他选择吗?

4

1 回答 1

5

如果您真的需要传递它们,我很确定您可以将它们作为适当类型的记录(例如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 规范相反),触发器按字母顺序执行,而不是按它们创建的顺序执行。

于 2013-05-03T12:53:05.927 回答