我的目標是在更新或洗掉這些表中的條目時為少數表創建觸發器。觸發器應將相應更新/洗掉表的名稱和列輸入另一個用戶表。可以撰寫單個觸發器,而不是為每個表撰寫單獨的觸發器嗎?
uj5u.com熱心網友回復:
可以撰寫單個觸發器,而不是為每個表撰寫單獨的觸發器嗎?
[TL;DR] 沒有
CREATE TRIGGER語法是:
句法
創建觸發器 ::=
plsql_trigger_source ::=
simple_dml_trigger ::=
dml_event_clause ::=
從語法圖中可以看出,a CREATE TRIGGERfor simple DML 將采用以下格式:
CREATE TRIGGER trigger_name
AFTER UPDATE OR DELETE ON table_name
該語法要求為每個觸發器指定一個表/視圖識別符號。
uj5u.com熱心網友回復:
正如@MT0 指出的那樣,觸發器與表相關聯,因此您需要為每個表創建單獨的觸發器。
另一方面,如果您真的想這樣做,您可以撰寫代碼,為許多不同的表動態生成所需的觸發器。最初這通常需要做更多的作業,但如果您真的想創建一堆具有相同基本邏輯的不同觸發器,那么最初的前期投資可能是合理的。
例如,您可以撰寫一些動態 SQL,根據資料字典創建您想要的觸發器。有關示例,請參見此小提琴。我沒有花任何時間在細節上,比如使生成的觸發器代碼特別容易讓人閱讀,或者充實你真正想要寫入日志表的要求。例如,大多數人想要檢查列的:new值是否與列的值不同,:old以查看它是否真的被改變了,而不是使用updating函式。我還猜想您的實際要求涉及將更新或洗掉的實際值寫入日志表,這會根據您支持的資料型別和日志表的結構等因素變得復雜。
就個人而言,我總是對這種要求有點懷疑。Oracle 有許多內置功能,使重復觸發器不太理想。例如,我更愿意為您想要跟蹤的任何表啟用閃回資料存檔,而不是處理一堆觸發器的開銷。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/481852.html




