SPI_execute_with_args
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 *commandÑÑÑока командÑ
intnargsÑиÑло Ð²Ñ Ð¾Ð´Ð½ÑÑ Ð¿Ð°ÑамеÑÑов (
$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') в конÑе не нÑжен.boolread_onlytrueÐ´Ð»Ñ Ñежима вÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Â«ÑолÑко ÑÑение»longcountмакÑималÑное ÑиÑло ÑÑÑок, коÑоÑое должно бÑÑÑ Ð²Ð¾Ð·Ð²ÑаÑено; Ñ
0огÑаниÑÐµÐ½Ð¸Ñ Ð½ÐµÑ
ÐозвÑаÑаемое знаÑение
ÐозвÑаÑаемÑе знаÑÐµÐ½Ð¸Ñ Ñе же, ÑÑо и Ñ SPI_execute.
ÐеÑеменнÑе SPI_processed и SPI_tuptable ÑÑÑанавливаÑÑÑÑ ÐºÐ°Ðº в SPI_execute, еÑли вÑзов бÑл ÑÑпеÑнÑм.