GetOracleRefCursor
このメソッドは、選択リストのREF CURSORタイプの列に対応するOracleRefCursorオブジェクトを返します。
宣言
// C# public OracleRefCursor GetOracleRefCursor(int index);
パラメータ
-
indexゼロベースの列索引です。
戻り値
列のOracleRefCursorオブジェクト。
例外
InvalidOperationException - 接続またはリーダーがクローズされているか、Read()が呼び出されていないか、すべての行が読み取られています。
IndexOutOfRangeException - 列索引が無効です。
InvalidCastException - この列型のアクセッサ・メソッドが無効か、列値がNULLです。
備考
アプリケーションは、戻されたOracleRefCursorオブジェクトからOracleDataReaderオブジェクトを取得してデータを読み取ることができます。
戻されたOracleRefCursorオブジェクトは、OracleDataReaderからFetchSize、InitialLOBFetchSize、InitialLONGFetchSizeおよびUseEdmMappingプロパティ値を継承します。
オープン・サーバー・カーソルの数を最小限にするには、OracleRefCursorオブジェクトを明示的に処理する必要があります。
例
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();
}
}