SPI_prepare

Name

SPI_prepare -- 為一個命令準備一個規劃,但還不執行它

Synopsis

void * SPI_prepare(const char * command, int nargs, Oid * argtypes)

描述

SPI_prepare 為聲明的命令創建和返回一個執行規劃但是不執行查詢。 應該只從一個已聯接的過程部調用。

如果相同或者類似的查詢要多次重復執行,那麼只進行一次查詢規劃應該是更好些。 SPI_prepare 把一個命令字串轉換成一個執行計劃,你可以用 SPI_execp 多次執行它。

我們可以把準備好的查詢通用化,方法是在那些普通查詢裡是常量的地方書寫參數($1,$2,等等)。 參數的數值隨後在調用 SPI_execp 的時候聲明。 這樣就允許已準備的查詢在遠比沒有參數時廣泛得多的場合下使用。

SPI_prepare 返回的規劃只能在當前過程調用中使用, 因為 SPI_finish 釋放為一個規劃分配的內存。 不過,一個規劃可以用函數 SPI_saveplan 函數保存更長的時間。

參數

const char * command

命令字串

int nargs

輸入參數的個數(($1$2,等等。)

Oid * argtypes

一個指針,指向包含參數數據類型的 OID 的數組

返回值

SPI_prepare 返回一個指向一個執行規劃的非空指針。 錯誤時將返回 NULL。不管成功還是錯誤,SPI_result 都將模擬 SPI_exec 的返回值進行設置, 例外是在 commandNULL 的時候, 或者是 nargs 小于 0 或者 nargs 大于 0 並且 argtypesNULL 的時候, SPI_result 會被設置成 SPI_ERROR_ARGUMENT

注意

使用參數有一個缺點:因為規劃器不知道將提供給參數的數值, 所以,相比普通的帶著所有可見常量的命令而言,它可能會做出一個較差的規劃選擇。