OracleRefCursor
オブジェクトは、Oracle REF
CURSOR
を表します。
クラスの継承
System.Object
System.MarshalRefByObject
Oracle.DataAccess.Types.OracleRefCursor
宣言
// C# public sealed class OracleRefCursor : MarshalByRefObject, IDisposable, INullable
スレッド安全性
パブリック静的メソッドはスレッドセーフですが、インスタンス・メソッドではスレッド安全性は保証されません。
例
// Database Setup /* connect scott/tiger@oracle CREATE OR REPLACE FUNCTION MyFunc(refcur_out OUT SYS_REFCURSOR) RETURN SYS_REFCURSOR IS refcur_ret SYS_REFCURSOR; BEGIN OPEN refcur_ret FOR SELECT * FROM EMP; OPEN refcur_out FOR SELECT * FROM DEPT; RETURN refcur_ret; END MyFunc; / */ // C# using System; using System.Data; using Oracle.DataAccess.Client; using Oracle.DataAccess.Types; class OracleRefCursorSample { static void Main() { // Example demonstrates how to use REF CURSORs returned from // PL/SQL Stored Procedures or Functions // Create the PL/SQL Function MyFunc as defined previously string constr = "User Id=scott;Password=tiger;Data Source=oracle"; OracleConnection con = new OracleConnection(constr); con.Open(); // Create an OracleCommand OracleCommand cmd = new OracleCommand("MyFunc", con); cmd.CommandType = CommandType.StoredProcedure; // Bind the parameters // p1 is the RETURN REF CURSOR bound to SELECT * FROM EMP; OracleParameter p1 = cmd.Parameters.Add("refcur_ret", OracleDbType.RefCursor); p1.Direction = ParameterDirection.ReturnValue; // p2 is the OUT REF CURSOR bound to SELECT * FROM DEPT OracleParameter p2 = cmd.Parameters.Add("refcur_out", OracleDbType.RefCursor); p2.Direction = ParameterDirection.Output; // Execute the command cmd.ExecuteNonQuery(); // Construct an OracleDataReader from the REF CURSOR OracleDataReader reader1 = ((OracleRefCursor)p1.Value).GetDataReader(); // Prints "reader1.GetName(0) = EMPNO" Console.WriteLine("reader1.GetName(0) = " + reader1.GetName(0)); // Construct an OracleDataReader from the REF CURSOR OracleDataReader reader2 = ((OracleRefCursor)p2.Value).GetDataReader(); // Prints "reader2.GetName(0) = DEPTNO" Console.WriteLine("reader2.GetName(0) = " + reader2.GetName(0)); reader1.Close(); reader1.Dispose(); reader2.Close(); reader2.Dispose(); p1.Dispose(); p2.Dispose(); cmd.Dispose(); con.Close(); con.Dispose(); } }
要件
ネームスペース: Oracle.DataAccess.Types
アセンブリ: Oracle.DataAccess.dll
Microsoft .NET Frameworkバージョン: 1.xまたは2.0
次の表に、OracleRefCursor
メンバーを示します。
OracleRefCursor静的メソッド
OracleRefCursor
静的メソッドのリストを、表11-28に示します。
OracleRefCursorプロパティ
OracleRefCursor
プロパティのリストを、表11-29に示します。
OracleRefCursorインスタンス・メソッド
OracleRefCursor
インスタンス・メソッドのリストを、表11-30に示します。
表11-30 OracleRefCursorインスタンス・メソッド
メソッド | 説明 |
---|---|
|
|
|
|
|
|
|
|
|
|
|
|
OracleRefCursor
静的メソッドのリストを、表11-31に示します。
OracleRefCursor
プロパティのリストを、表11-32に示します。
このプロパティは、REF
CURSOR
データのフェッチに使用されるOracleConnection
を参照します。
宣言
// C# public OracleConnection Connection {get;}
プロパティ値
OracleConnection
例外
ObjectDisposedException
: オブジェクトはすでに処理されています。
備考
このプロパティを設定すると、REF
CURSOR
にバインドされます。コンストラクタによってOracleRefCursor
オブジェクトが作成されると、このプロパティは最初はnull
になります。コマンドを実行すると、OracleRefCursor
オブジェクトはREF
CURSOR
にバインドされます。
接続がクローズされるか、または接続プールに返されると、OracleRefCursor
は未初期化状態になり、このオブジェクトからの操作は実行されません。ただし、未初期化のOracleRefCursor
を別のREF
CURSOR
に再割当てすることはできます。
OracleRefCursor
インスタンス・メソッドのリストを、表11-33に示します。
表11-33 OracleRefCursorインスタンス・メソッド
メソッド | 説明 |
---|---|
|
|
|
|
|
|
|
|
|
|
|
|
このインスタンス・メソッドは、OracleRefCursor
オブジェクトによって割り当てられたリソースを処理します。
宣言
// C# public void Dispose();
実装
IDisposable
備考
オブジェクトは、処理後は再度使用できません。
Dispose()
が呼び出されると、OracleRefCursor
のオブジェクトは未初期化状態になります。引き続き一部のプロパティにアクセスすることはできますが、その値は信頼できません。リソースが解放されているため、メソッドのコールにより例外が発生することがあります。
このインスタンス・メソッドは、REF
CURSOR
のOracleDataReader
オブジェクトを戻します。
宣言
// C# public OracleDataReader GetDataReader();
戻り値
OracleDataReader
備考
OracleDataReader
を使用すると、REF
CURSOR
から行をフェッチできます。