プライマリ・コンテンツに移動
Oracle® Data Provider for .NET開発者ガイド
ODAC 12c リリース4 (12.1.0.2) for Microsoft Windows
E72575-01
  目次へ移動
目次
索引へ移動
索引

前
 
次
 

OracleRefCursorクラス

OracleRefCursorオブジェクトは、Oracle REF CURSORを表します。

クラスの継承

System.Object

  System.MarshalRefByObject

    Oracle.DataAccess.Types.OracleRefCursor

宣言

// C#
public sealed class OracleRefCursor : MarshalByRefObject, IDisposable, INullable

要件

プロバイダ ODP.NET管理対象外ドライバ ODP.NET管理対象ドライバ
アセンブリ Oracle.DataAccess.dll Oracle.ManagedDataAccess.dll
ネームスペース Oracle.DataAccess.Types Oracle.ManagedDataAccess.Types
.NET Framework 3.5, 4.0, 4.5, 4.6 4.0, 4.5, 4.6

スレッド安全性

パブリック静的メソッドはスレッドセーフですが、インスタンス・メソッドではスレッド安全性は保証されません。

備考

オープン・サーバー・カーソルの数を最小限にするには、OracleRefReaderオブジェクトを明示的に処理する必要があります。

// 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();
  }
}

OracleRefCursorメンバー

次の表に、OracleRefCursorメンバーを示します。

OracleRefCursor静的メソッド

OracleRefCursor静的メソッドを、表13-28にリストします。

表13-28 OracleRefCursor静的メソッド

メソッド 説明

Equals

System.Objectからの継承(オーバーロード)


OracleRefCursor静的フィールド

OracleRefCursor静的フィールドを、表13-29にリストします。

表13-29 OracleRefCursor静的フィールド

メソッド 説明

Null


OracleRefCursorインスタンスに割り当てることができるNULL値を表します


OracleRefCursorプロパティ

OracleRefCursorプロパティを、表13-30にリストします。

表13-30 OracleRefCursorプロパティ

プロパティ 説明

Connection


REF CURSORデータのフェッチに使用されるOracleConnectionへの参照

FetchSize


OracleDataReader内部キャッシュが結果セット・データを格納するのために必要なサイズを指定します

IsNull


OracleRefCursorがNULLかどうかを示します。

RowSize


OracleRefcursor内部キャッシュがデータの1行を格納するのに必要なメモリー量を指定します


OracleRefCursorインスタンス・メソッド

OracleRefCursorインスタンス・メソッドを、表13-31にリストします。

表13-31 OracleRefCursorインスタンス・メソッド

メソッド 説明

Dispose


OracleRefCursorオブジェクトによって割り当てられたリソースを処理します

Equals

System.Objectからの継承(オーバーロード)

GetDataReader


REF CURSOROracleDataReaderオブジェクトを戻します

GetHashCode

System.Objectからの継承

GetType

System.Objectからの継承

ToString

System.Objectからの継承


OracleRefCursor静的メソッド

OracleRefCursor静的メソッドを、表13-32にリストします。

表13-32 OracleRefCursor静的メソッド

メソッド 説明

Equals

System.Objectからの継承(オーバーロード)


OracleRefCursor静的フィールド

OracleRefCursor静的フィールドを、表13-32にリストします。

表13-33 OracleRefCursor静的フィールド

メソッド 説明

Null


OracleRefCursorインスタンスに割り当てることができるNULL値を表します


Null

この静的フィールドは、OracleRefCursorインスタンスに割り当てることができるNULL値を表します。

宣言

// C#
public static readonly OracleRefCursor Null;

OracleRefCursorプロパティ

OracleRefCursorプロパティを、表13-34にリストします。

表13-34 OracleRefCursorプロパティ

プロパティ 説明

Connection


REF CURSORデータのフェッチに使用されるOracleConnectionへの参照

FetchSize


OracleDataReader内部キャッシュが結果セット・データを格納するのために必要なサイズを指定します

IsNull


OracleRefCursorがNULLかどうかを示します。

RowSize


OracleRefcursor内部キャッシュがデータの1行を格納するのに必要なメモリー量を指定します


Connection

このプロパティは、REF CURSORデータのフェッチに使用されるOracleConnectionを参照します。

宣言

// C#
public OracleConnection Connection {get;}

プロパティ値

OracleConnection

例外

ObjectDisposedException - オブジェクトはすでに処理されています。

備考

このプロパティを設定すると、REF CURSORにバインドされます。コンストラクタによってOracleRefCursorオブジェクトが作成されると、このプロパティは最初はnullになります。コマンドを実行すると、OracleRefCursorオブジェクトはREF CURSORにバインドされます。

接続がクローズされるか、または接続プールに返されると、OracleRefCursorは未初期化状態になり、このオブジェクトからの操作は実行されません。ただし、未初期化のOracleRefCursorを別のREF CURSORに再割当てすることはできます。

FetchSize

このプロパティは、OracleDataReaderの内部キャッシュのサイズを指定し、結果セットのデータを格納します。

宣言

// C#
public long FetchSize {get; set;}

プロパティ値

OracleRefCursor内部キャッシュのサイズ(バイト)を指定するlongです。

例外

ArgumentException - 指定したFetchSize値は無効です。

備考

デフォルト = 131072

FetchSizeプロパティ値はOracleRefCursorオブジェクトを作成したOracleCommandに継承されます。OracleDataReaderオブジェクトのFetchSizeプロパティは、OracleRefCursorがデータベース・ラウンドトリップごとに内部キャッシュにフェッチするデータ量を定義します。

このプロパティは、REF CURSORのデータのフェッチ方法の制御を提供するため、OracleDataAdapterを介して、DataSetまたはDataTableを入力する際に明示的にOracleRefCursorを使用する場合に有用です。

OracleDataReaderオブジェクトがOracleRefCursorから作成される場合、作成したOracleDataReaderオブジェクトは、OracleDataReaderオブジェクトのFetchSize値を継承します。ただし、OracleDataReader FetchSizeプロパティを設定して、結果セットに対してOracleDataReader Readメソッドを最初に呼び出す前に継承した値を設定すると、その値はオーバーライドされます。

RowSizeおよびFetchSizeプロパティは、他のスカラー・データ型とは異なる方法でUDTおよびXMLTypeデータを処理します。ODP.NETの内部キャッシュにはUDTおよびXMLTypeデータへの参照のみが格納されているため、RowSizeプロパティはUDTおよびXMLTypeデータの実際のサイズではなく、参照に必要なメモリー(非常に少量)のみを算定します。その結果、アプリケーションは1回のデータベース・ラウンドトリップで多数のUDTまたはXMLTypeインスタンスをデータベースからフェッチしてしまう可能性があります。これは、UDTおよびXMLTypeデータの実際のサイズがFetchSizeに対するものではなく、デフォルトのキャッシュ・サイズである131072バイトを満たすには非常に多くのUDTおよびXMLType参照が必要となるためです。したがって、UDTまたはXMLTypeデータをフェッチする際には、フェッチする実際のUDTおよびXMLTypeデータの総量ではなく、対象UDTおよびXMLTypeインスタンスの数を制御するよう、FetchSizeプロパティを適切に構成する必要があります。

注意: LOBおよびLONGデータ型の場合、選択リストの各LOBのキャッシュによって保持されたメタデータおよび参照情報に加えて、InitialLOBFetchSizeおよびInitialLONGFetchSizeプロパティで指定されたサイズのみがRowSizeプロパティによって算定されます。

IsNull

このプロパティは、OracleRefCursorがNULLかどうかを示します。

宣言

// C#
public bool IsNull {get;}

プロパティ値

OracleRefCursorがnullの値型を表す場合、trueを返します。それ以外の場合はfalseを戻します。

例外

ObjectDisposedException - オブジェクトはすでに処理されています。

InvalidOperationException - OracleConnectionがオープンされていないか、またはオブジェクトの存続中にクローズされています。

RowSize

このプロパティは、OracleRefcursor内部キャッシュがデータの1行を保存するために必要とするメモリー量を指定します。

宣言

// C#
public long RowSize {get;}

プロパティ値

longは、OracleRefcursorが実行された問合せのデータ1行を格納するために必要とするメモリー量(バイト)を示します。

備考

RowSizeプロパティは、OracleRefcursorオブジェクトが作成されると、ゼロ以外の値に設定されます。このプロパティは、行数に基づいてFetchSizeを設定する場合に、設計時または実行時に動的に使用できます。たとえば、OracleRefcursorを有効にして、データベース・ラウンドトリップごとにN行をフェッチするには、OracleRefcursor FetchSizeプロパティをRowSize * Nに動的に設定できます。FetchSizeを適切に有効化するには、OracleDataAdapterを使用して、DataSetまたはDataTableを入力してから設定する必要があることに注意してください。

OracleDataReaderGetDataReaderメソッドを介してOracleRefCursorから取得される場合、OracleDataReaderには、OracleRefCursorFetchSize値に対するFetchSizeプロパティ・セットが含まれます。

OracleRefCursorインスタンス・メソッド

OracleRefCursorインスタンス・メソッドを、表13-35にリストします。

表13-35 OracleRefCursorインスタンス・メソッド

メソッド 説明

Dispose


OracleRefCursorオブジェクトによって割り当てられたリソースを処理します

Equals

System.Objectからの継承(オーバーロード)

GetDataReader


REF CURSOROracleDataReaderオブジェクトを戻します

GetHashCode

System.Objectからの継承

GetType

System.Objectからの継承

ToString

System.Objectからの継承


Dispose

このインスタンス・メソッドは、OracleRefCursorオブジェクトによって割り当てられたリソースを処理します。

宣言

// C#
public void Dispose();

実装

IDisposable

備考

オブジェクトは、処理後は再度使用できません。

Dispose()が呼び出されると、OracleRefCursorのオブジェクトは未初期化状態になります。引き続き一部のプロパティにアクセスすることはできますが、その値は信頼できません。リソースが解放されているため、メソッドのコールにより例外が発生することがあります。

GetDataReader

このインスタンス・メソッドは、REF CURSOROracleDataReaderオブジェクトを戻します。

宣言

// C#
public OracleDataReader GetDataReader();

戻り値

OracleDataReader

備考

OracleDataReaderを使用すると、REF CURSORから行をフェッチできます。