---
title: "SPI_cursor_open_with_args"
id: spi-spi-cursor-open-with-args
pg_version: "20devel"
---
# SPI_cursor_open_with_args — set up a cursor using a query and parameters
## Synopsis
```
Portal SPI_cursor_open_with_args(const char *name,
const char *command,
int nargs, const Oid *argtypes,
const Datum *values, const char *nulls,
bool read_only, int cursorOptions)
```
## Description
`SPI_cursor_open_with_args` sets up a cursor (internally, a portal) that will execute the specified query. Most of the parameters have the same meanings as the corresponding parameters to `SPI_prepare_cursor` and `SPI_cursor_open`.
For one-time query execution, this function should be preferred over `SPI_prepare_cursor` followed by `SPI_cursor_open`. If the same command is to be executed with many different parameters, either method might be faster, depending on the cost of re-planning versus the benefit of custom plans.
The passed-in parameter data will be copied into the cursor's portal, so it can be freed while the cursor still exists.
This function is now deprecated in favor of `SPI_cursor_parse_open`, which provides equivalent functionality using a more modern API for handling query parameters.
## Arguments
**`const char * name`**
name for portal, or `NULL` to let the system select a name **`const char * command`**
command string **`int nargs`**
number of input parameters (`$1`, `$2`, etc.) **`Oid * argtypes`**
an array of length `nargs`, containing the OIDs of the data types of the parameters **`Datum * values`**
an array of length `nargs`, containing the actual parameter values **`const char * nulls`**
an array of length `nargs`, describing which parameters are null If `nulls` is `NULL` then `SPI_cursor_open_with_args` 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**`int cursorOptions`**
integer bit mask of cursor options; zero produces default behavior
## Return Value
Pointer to portal containing the cursor. Note there is no error return convention; any error will be reported via `elog`.