PostgreSQL SPI_execute_with_args

2021-09-06 10:52 更新

SPI_execute_with_args — 用線外參數(shù)執(zhí)行一個(gè)命令

大綱

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執(zhí)行一個(gè)可能包括 對(duì)外部提供的參數(shù)引用的命令。命令文本用 $n 引用一個(gè)參數(shù),并且調(diào)用 會(huì)為每一個(gè)這種符號(hào)指定數(shù)據(jù)類型和值。 read_onlycount的解釋與 SPI_execute中相同。

相對(duì)于SPI_execute,這個(gè)例程的主要優(yōu) 點(diǎn)是數(shù)據(jù)值可以被插入到命令中而無需冗長(zhǎng)的引用/轉(zhuǎn)義,并且因此 減少了 SQL 注入攻擊的風(fēng)險(xiǎn)。

可以通過在SPI_prepare后面跟上 SPI_execute_plan達(dá)到相似的結(jié)果。但是, 使用這個(gè)函數(shù)時(shí)查詢計(jì)劃總是被定制成提供的指定參數(shù)值。對(duì)于一次 性的查詢執(zhí)行,這個(gè)函數(shù)應(yīng)該更好。如果同樣的命令需要用很多不同 的參數(shù)執(zhí)行,兩種方法都可能會(huì)更快,這取決于重新做規(guī)劃的代價(jià)與 定制計(jì)劃帶來的好處之間的對(duì)比。

參數(shù)

const char * command

命令字符串

int nargs

輸入?yún)?shù)的數(shù)量($1、$2等等)。

Oid * argtypes

一個(gè)長(zhǎng)度為nargs的數(shù)組, 包含參數(shù)的數(shù)據(jù)類型的OID

Datum * values

一個(gè)長(zhǎng)度為nargs的數(shù)組, 包含實(shí)際的參數(shù)值

const char * nulls

一個(gè)長(zhǎng)度為nargs的數(shù)組, 描述哪些參數(shù)為空值

如果nullsNULL, 那么SPI_execute_with_args會(huì)假設(shè)沒有參數(shù) 為空值。否則,如果對(duì)應(yīng)的參數(shù)值為非空, nulls 數(shù)組的每一個(gè)項(xiàng)都應(yīng)該是' ';如果對(duì)應(yīng)參數(shù)值為空, nulls 數(shù)組的項(xiàng)應(yīng)為'n'(在后 面的情況中,對(duì)應(yīng)的values項(xiàng)中的值沒有 關(guān)系)。注意nulls不是一個(gè)文本字符串, 它只是一個(gè)數(shù)組:它不需要一個(gè)'\0'終止符。

bool read_only

對(duì)只讀執(zhí)行是true

long count

要返回的最大行數(shù),0表示沒有限制

返回值

該返回值和SPI_execute一樣。

如果成功SPI_execute會(huì)設(shè)置 SPI_processedSPI_tuptable

以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)