GetOracleRefCursor
This method returns the OracleRefCursor
object corresponding to the REF CURSOR
type column in the select list.
Declaration
// C# public OracleRefCursor GetOracleRefCursor(int index);
Parameters
-
index
The zero-based column index.
Return Value
The OracleRefCursor
object of the column.
Expections
InvalidOperationException
- The connection is closed, the reader is closed, Read()
has not been called, or all rows have been read.
IndexOutOfRangeException
- The column index is invalid.
InvalidCastException
- The accessor method is invalid for this column type or the column value is NULL
.
Remarks
The application can get the OracleDataReader
object from the returned OracleRefCursor
object to read data.
The returned OracleRefCursor
object inherits the FetchSize
, InitialLOBFetchSize
, InitialLONGFetchSize
, and UseEdmMapping
property values from OracleDataReader
.
To minimize the number of open server cursors, OracleRefCursor
objects should be explicitly disposed.
Sample
CREATE OR REPLACE FUNCTION refcurfunc1 RETURN SYS_REFCURSOR AS VAR_REF SYS_REFCURSOR; BEGIN OPEN VAR_REF FOR SELECT * FROM EMP; RETURN VAR_REF; END;
using (OracleConnection con = new OracleConnection("user id = scott; password = <PASSWORD>; data source = oracle")) { con.Open(); OracleCommand cmd = con.CreateCommand(); cmd.CommandText = "select refcurfunc1() from dual"; OracleDataReader reader = cmd.ExecuteReader(); while (reader.Read()) { OracleRefCursor refCur = reader.GetOracleRefCursor(0); OracleDataReader refCurReader = refCur.GetDataReader(); while (refCurReader.Read()) { Console.WriteLine("RefCursor Data: " + refCurReader.GetString(0)); } refCurReader.Close(); refCurReader.Dispose(); refCur.Dispose(); } }