以下規則管理使用 SPI 的函式(或任何其他 C 函式)中資料變更的可見性
在執行 SQL 指令期間,該指令所做的任何資料變更對於指令本身是不可見的。 例如,在
INSERT INTO a SELECT * FROM a;
插入的列對於 SELECT
部分是不可見的。
指令 C 所做的變更對於在 C 之後啟動的所有指令都是可見的,無論它們是在 C 內部(在 C 的執行期間)還是 C 完成之後啟動。
透過 SPI 在由 SQL 指令呼叫的函式(無論是普通函式還是觸發程序)中執行的指令,根據傳遞給 SPI 的讀/寫標誌遵循上述規則之一。 以唯讀模式執行的指令遵循第一條規則:它們看不到呼叫指令的變更。 以讀寫模式執行的指令遵循第二條規則:它們可以看到到目前為止所做的所有變更。
所有標準程序語言都根據函式的 volatility 屬性設定 SPI 讀寫模式。 STABLE
和 IMMUTABLE
函式的指令以唯讀模式完成,而 VOLATILE
函式的指令以讀寫模式完成。 雖然 C 函式的作者可以違反此慣例,但這樣做可能不是一個好主意。
下一節包含一個範例,說明這些規則的應用。
如果您在文件中發現任何不正確、與您使用特定功能的經驗不符或需要進一步澄清的地方,請使用此表單回報文件問題。