以下規則控制著使用 SPI(或其他任何 C 函式)的函式中資料更改的可視性。
在 SQL 命令執行期間,由該命令所做的任何資料更改對該命令本身是不可見的。例如,在
INSERT INTO a SELECT * FROM a;
插入的行對於 SELECT
部分是不可見的。
由命令 C 所做的更改,對所有在 C 之後啟動的命令都是可見的,無論這些命令是在 C 內部啟動(在 C 執行期間)還是在 C 完成之後啟動。
在由 SQL 命令(無論是普通函式還是觸發器)呼叫的函式中透過 SPI 執行的命令,將根據傳遞給 SPI 的讀/寫標誌遵循上述規則之一。以只讀模式執行的命令遵循第一條規則:它們無法看到呼叫命令的更改。以讀寫模式執行的命令遵循第二條規則:它們可以看到迄今為止所做的所有更改。
所有標準的儲存過程語言都根據函式的易變性(volatility)屬性設定 SPI 讀寫模式。 STABLE
和 IMMUTABLE
函式的命令以只讀模式執行,而 VOLATILE
函式的命令以讀寫模式執行。雖然 C 函式的作者可以違反此約定,但這樣做很可能不是一個好主意。
下一節包含一個示例,說明了這些規則的應用。
如果您在文件中看到任何不正確之處、與您對特定功能的實際體驗不符之處,或需要進一步說明之處,請使用 此表單 報告文件問題。