A ref cursor is a pointer to a server-side cursor variable. It is analogous to a pointer in "C" in that it is an address to a location in memory. The stored procedure returns a reference to a cursor that is open and populated by a SELECT statement to be used as a block datasource.
A stored procedure that uses a reference cursor can only be used as a query block datasource; it cannot be used for DML block datasource. Using a ref cursor is ideal for queries that are dependent only on variations in SQL statements and not PL/SQL.
When deciding whether to use a ref cursor or a table of records, consider that: