---
name: "SPI_execute_plan"
section: "3"
platform: "linux"
package: "postgresql"
version: "18.6-4"
release: "Arch Linux 2026-11-01"
platforms: ["linux"]
url: "https://new.carta.tech/SPI_execute_plan"
---

# SPI\_execute\_plan(3)

execute a statement prepared by SPI\_prepare

## NAME

SPI\_execute\_plan - execute a statement prepared by **SPI\_prepare**

## SYNOPSIS

```
int SPI_execute_plan(SPIPlanPtr plan, Datum * values, const char * nulls,
                     bool read_only, long count)
```

## DESCRIPTION

**SPI\_execute\_plan** executes a statement prepared by **SPI\_prepare** or one of its siblings. *read\_only* and *count* have the same interpretation as in **SPI\_execute**.

## ARGUMENTS

SPIPlanPtr *plan*

prepared statement (returned by **SPI\_prepare**)

Datum \* *values*

An array of actual parameter values. Must have same length as the statement's number of arguments.

const char \* *nulls*

An array describing which parameters are null. Must have same length as the statement's number of arguments.

If *nulls* is NULL then **SPI\_execute\_plan** assumes that no parameters are null. Otherwise, each entry of the *nulls* array should be ' ' if the corresponding parameter value is non-null, or 'n' if the corresponding parameter value is null. (In the latter case, the actual value in the corresponding *values* entry doesn't matter.) Note that *nulls* is not a text string, just an array: it does not need a '\\0' terminator.

bool *read\_only*

true for read-only execution

long *count*

maximum number of rows to return, or 0 for no limit

## RETURN VALUE

The return value is the same as for **SPI\_execute**, with the following additional possible error (negative) results:

SPI\_ERROR\_ARGUMENT

if *plan* is NULL or invalid, or *count* is less than 0

SPI\_ERROR\_PARAM

if *values* is NULL and *plan* was prepared with some parameters

*SPI\_processed* and *SPI\_tuptable* are set as in **SPI\_execute** if successful.
