【问题标题】:How to pass NEW/OLD to procedures called from trigger functions in PostgreSQL?如何将 NEW/OLD 传递给从 PostgreSQL 中的触发器函数调用的过程?
【发布时间】:2013-05-03 12:26:42
【问题描述】:

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

【问题讨论】:

    标签: postgresql stored-procedures triggers


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2016-09-18
      • 2018-11-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多