SPI_execute_with_args — 使用外部引數執行命令
int SPI_execute_with_args(const char *command, intnargs, Oid *argtypes, Datum *values, const char *nulls, boolread_only, longcount)
SPI_execute_with_args 執行一個可能包含對外部提供的引數引用的命令。命令文字使用 $ 來引用引數,呼叫時會指定每個符號的資料型別和值。nread_only 和 count 的解釋與 SPI_execute 中的相同。
與 SPI_execute 相比,此例程的主要優點是資料值可以插入到命令中,而無需繁瑣的引用/轉義,從而大大降低了 SQL 注入攻擊的風險。
可以使用 SPI_prepare 後跟 SPI_execute_plan 來實現類似的結果;但是,使用此函式時,查詢計劃總是會針對提供的特定引數值進行定製。對於一次性查詢執行,應優先使用此函式。如果同一命令要用許多不同的引數執行,兩種方法可能都更快,具體取決於重新規劃的成本與自定義計劃的好處。
const char * commandcommand string
int nargs輸入引數的數量($1、$2 等)
Oid * argtypes一個長度為 nargs 的陣列,包含OID引數的資料型別
Datum * values一個長度為 nargs 的陣列,包含實際的引數值
const char * nulls一個長度為 nargs 的陣列,描述哪些引數為 null
如果 nulls 為 NULL,則 SPI_execute_with_args 假定沒有引數為 null。否則,nulls 陣列的每個條目應為 ' '(如果對應的引數值非 null)或 'n'(如果對應的引數值是 null)。(在後一種情況下,values 條目中的實際值無關緊要。)請注意,nulls 不是一個文字字串,而只是一個數組:它不需要 '\0' 終止符。
bool read_only只讀執行時為 true
long count要返回的最大行數,或 0 表示無限制
返回值與 SPI_execute 相同。
如果成功,SPI_processed 和 SPI_tuptable 的設定與 SPI_execute 中的相同。
如果您在文件中發現任何不正確、與您對特定功能的使用體驗不符或需要進一步澄清的內容,請使用 此表格 報告文件問題。