簡體   English   中英

如何將NEW / OLD傳遞給PostgreSQL中的觸發函數調用的過程?

[英]How to pass NEW/OLD to procedures called from trigger functions in PostgreSQL?

假設我有一個觸發函數,但是它的代碼是如此復雜,以至於將其拆分為更多的過程將很方便。 我想在所有變量中都使用NEW(或OLD用於UPDATE / DELETE觸發器)變量。 除了將其作為函數參數發送給從原始觸發函數調用的每個過程之外,還有其他選擇嗎?

如果您確實需要傳遞它們,我很確定您可以將其作為適當類型的記錄(例如newrow tablename%ROWTYPE )進行newrow tablename%ROWTYPE

http://www.postgresql.org/docs/current/static/plpgsql-declarations.html

也就是說,除非您運行在整個觸發器函數中使用其結果的巨型查詢,否則將觸發器分成較小的部分通常比調用子函數imho更干凈。 請注意,您可以有條件地執行觸發器,例如:

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規范相反)中,觸發器以字母順序而不是創建順序執行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM