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
執行一個可能包含對外部提供的引數引用的命令。命令文字使用 $
來引用引數,呼叫時會指定每個符號的資料型別和值。n
read_only
和 count
的解釋與 SPI_execute
中的相同。
與 SPI_execute
相比,此例程的主要優點是資料值可以插入到命令中,而無需繁瑣的引用/轉義,從而大大降低了 SQL 注入攻擊的風險。
可以使用 SPI_prepare
後跟 SPI_execute_plan
來實現類似的結果;但是,使用此函式時,查詢計劃總是會針對提供的特定引數值進行定製。對於一次性查詢執行,應優先使用此函式。如果同一命令要用許多不同的引數執行,兩種方法可能都更快,具體取決於重新規劃的成本與自定義計劃的好處。
const char * command
command 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
中的相同。
如果您在文件中發現任何不正確、與您對特定功能的使用體驗不符或需要進一步澄清的內容,請使用 此表格 報告文件問題。