SPI_cursor_open(name, plan, values, nulls)
SPI_cursor_open sets up a cursor (internally, a Portal) that will execute a plan prepared by SPI_prepare.
Using a cursor instead of executing the plan directly has two benefits. First, the result rows can be retrieved a few at a time, avoiding memory overrun for queries that return many rows. Second, a Portal can outlive the current procedure (it can, in fact, live to the end of the current transaction). Returning the portal name to the procedure's caller provides a way of returning a rowset result.