如果您在觸發程序函式中執行 SQL 命令,並且這些命令存取觸發程序所針對的資料表,則您需要注意資料可見性規則,因為它們決定這些 SQL 命令是否會看到觸發程序觸發的資料變更。簡而言之:
語句層級觸發程序遵循簡單的可見性規則:語句所做的任何變更對於語句層級的 BEFORE
觸發程序都是不可見的,而所有修改對於語句層級的 AFTER
觸發程序都是可見的。
導致觸發程序觸發的資料變更(插入、更新或刪除)對於在列層級 BEFORE
觸發程序中執行的 SQL 命令自然是不可見的,因為它尚未發生。
但是,在列層級 BEFORE
觸發程序中執行的 SQL 命令將看到在同一個外部命令中先前處理的列的資料變更效果。這需要謹慎,因為這些變更事件的順序通常是不可預測的;影響多個列的 SQL 命令可以以任何順序訪問這些列。
類似地,列層級 INSTEAD OF
觸發程序將看到在同一個外部命令中先前觸發的 INSTEAD OF
觸發程序所做的資料變更效果。
當觸發列層級 AFTER
觸發程序時,外部命令所做的所有資料變更都已完成,並且對於調用的觸發程序函式是可見的。
如果您的觸發程序函式是以任何標準程序語言編寫的,則上述陳述僅在函式宣告為 VOLATILE
時才適用。無論如何,宣告為 STABLE
或 IMMUTABLE
的函式都看不到呼叫命令所做的變更。
如果您在文件中發現任何不正確、與特定功能的體驗不符或需要進一步澄清的地方,請使用此表單來回報文件問題。