支援的版本: 目前 (17) / 16 / 15 / 14 / 13
開發版本: devel
不再支援的版本: 12 / 11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1 / 9.0 / 8.4 / 8.3 / 8.2 / 8.1 / 8.0 / 7.4 / 7.3 / 7.2 / 7.1

45.5. 資料變更的可見性 #

以下規則管理使用 SPI 的函式(或任何其他 C 函式)中資料變更的可見性

  • 在執行 SQL 指令期間,該指令所做的任何資料變更對於指令本身是不可見的。 例如,在

    INSERT INTO a SELECT * FROM a;
    

    插入的列對於 SELECT 部分是不可見的。

  • 指令 C 所做的變更對於在 C 之後啟動的所有指令都是可見的,無論它們是在 C 內部(在 C 的執行期間)還是 C 完成之後啟動。

  • 透過 SPI 在由 SQL 指令呼叫的函式(無論是普通函式還是觸發程序)中執行的指令,根據傳遞給 SPI 的讀/寫標誌遵循上述規則之一。 以唯讀模式執行的指令遵循第一條規則:它們看不到呼叫指令的變更。 以讀寫模式執行的指令遵循第二條規則:它們可以看到到目前為止所做的所有變更。

  • 所有標準程序語言都根據函式的 volatility 屬性設定 SPI 讀寫模式。 STABLEIMMUTABLE 函式的指令以唯讀模式完成,而 VOLATILE 函式的指令以讀寫模式完成。 雖然 C 函式的作者可以違反此慣例,但這樣做可能不是一個好主意。

下一節包含一個範例,說明這些規則的應用。

提交更正

如果您在文件中發現任何不正確、與您使用特定功能的經驗不符或需要進一步澄清的地方,請使用此表單回報文件問題。