2025年9月25日: PostgreSQL 18 釋出!
支援的版本: 當前 (18) / 17 / 16 / 15 / 14 / 13
開發版本: devel
不支援的版本: 12 / 11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1 / 9.0 / 8.4

SPI_execute_with_args

SPI_execute_with_args — 使用外部引數執行命令

概要

int SPI_execute_with_args(const char *command,
                          int nargs, Oid *argtypes,
                          Datum *values, const char *nulls,
                          bool read_only, long count)

描述

SPI_execute_with_args 執行一個可能包含對外部提供的引數引用的命令。命令文字使用 $n 來引用引數,呼叫時會指定每個符號的資料型別和值。read_onlycount 的解釋與 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

如果 nullsNULL,則 SPI_execute_with_args 假定沒有引數為 null。否則,nulls 陣列的每個條目應為 ' '(如果對應的引數值非 null)或 'n'(如果對應的引數值是 null)。(在後一種情況下,values 條目中的實際值無關緊要。)請注意,nulls 不是一個文字字串,而只是一個數組:它不需要 '\0' 終止符。

bool read_only

只讀執行時為 true

long count

要返回的最大行數,或 0 表示無限制

返回值

返回值與 SPI_execute 相同。

如果成功,SPI_processedSPI_tuptable 的設定與 SPI_execute 中的相同。

提交更正

如果您在文件中發現任何不正確、與您對特定功能的使用體驗不符或需要進一步澄清的內容,請使用 此表格 報告文件問題。