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 的返回值進行設置,
例外是在 command 是 NULL 的時候,
或者是 nargs 小于 0 或者 nargs 大于 0 並且 argtypes 是 NULL 的時候,
SPI_result 會被設置成 SPI_ERROR_ARGUMENT。
注意
使用參數有一個缺點:因為規劃器不知道將提供給參數的數值,
所以,相比普通的帶著所有可見常量的命令而言,它可能會做出一個較差的規劃選擇。