---
title: "SPI_prepare_cursor"
id: spi-spi-prepare-cursor
pg_version: "20devel"
---
# SPI_prepare_cursor — prepare a statement, without executing it yet
## Synopsis
```
SPIPlanPtr SPI_prepare_cursor(const char * command, int nargs,
const Oid * argtypes, int cursorOptions)
```
## Description
`SPI_prepare_cursor` is identical to `SPI_prepare`, except that it also allows specification of the planner's "cursor options" parameter. This is a bit mask having the values shown in `nodes/parsenodes.h` for the `options` field of DeclareCursorStmt. `SPI_prepare` always takes the cursor options as zero.
This function is now deprecated in favor of `SPI_prepare_extended`.
## Arguments
**`const char * command`**
command string **`int nargs`**
number of input parameters (`$1`, `$2`, etc.) **`Oid * argtypes`**
pointer to an array containing the OIDs of the data types of the parameters **`int cursorOptions`**
integer bit mask of cursor options; zero produces default behavior
## Return Value
`SPI_prepare_cursor` has the same return conventions as `SPI_prepare`.
## Notes
Useful bits to set in `cursorOptions` include `CURSOR_OPT_SCROLL`, `CURSOR_OPT_NO_SCROLL`, `CURSOR_OPT_FAST_PLAN`, `CURSOR_OPT_GENERIC_PLAN`, and `CURSOR_OPT_CUSTOM_PLAN`. Note in particular that `CURSOR_OPT_HOLD` is ignored.