ヘッダーをスキップ
Oracle Data Provider for .NET開発者ガイド
11g リリース1(11.1)
E05791-01
  目次へ
目次
索引へ
索引

戻る
戻る
 
次へ
次へ
 

OracleCommandオブジェクト

OracleCommandオブジェクトは、Oracle Databaseで実行されるSQL文またはストアド・プロシージャを表します。

この項の内容は次のとおりです。

トランザクション

Oracle Databaseは、接続のコンテキストでのみトランザクションを開始します。トランザクションが開始すると、その接続で引き続き行われるコマンド実行はすべて、そのトランザクションのコンテキストで実行されます。トランザクションはOracleConnectionオブジェクトでのみ開始され、OracleConnectionオブジェクトのTransaction読取り専用プロパティは、OracleConnectionオブジェクトによって暗黙的に設定されます。このため、アプリケーションはTransactionプロパティを設定できません。また、設定する必要もありません。


注意:

トランザクションは、.NETストアド・プロシージャではサポートされません。

パラメータ・バインド

OracleParameterオブジェクトのDbTypeプロパティが設定されている場合、OracleParameterオブジェクトのOracleDbTypeプロパティも変更されます。その逆も同じです。パラメータ・セットは最後に有効になります。アプリケーションはデータをバインドして、パラメータ値の.NETタイプから、ODP.NETでDbTypeOracleDbTypeの両方のプロパティを推測します。ODP.NETを使用すると、アプリケーションでは、出力パラメータを.NETフレームワーク・タイプまたはODP.NETタイプのいずれかとして取得できます。アプリケーションでは、出力パラメータのDbTypeプロパティ(.NETタイプ)、またはOracleParameterオブジェクトのOracleDbTypeプロパティ(ODP.NETタイプ)を設定することで、出力パラメータに対してどちらのタイプを戻すかを指定できます。たとえば、DbTypeプロパティを設定することで出力パラメータがDbType.String型として設定されている場合、出力データは.NET String型として戻されます。一方、OracleDbTypeプロパティを設定することでパラメータがOracleDbType.Charとして設定されている場合、出力データはOracleString型として戻されます。DbTypeOracleDbTypeの両方のプロパティを設定してからコマンドを実行した場合は、最後の設定が有効になります。

ODP.NETは、次のOracleCommandメソッドの実行により、OracleデータをInputOutputOutputおよびReturnValueパラメータに移入します。

  • ExecuteReader

  • ExecuteNonQuery

  • ExecuteScalar

アプリケーションは、出力パラメータの値をバインドできません。出力パラメータ値のバインドはODP.NETによって行われます。値オブジェクトが作成され、オブジェクトがOracleParameter Valueプロパティに移入されます。

位置によってファンクションにバインドする場合(デフォルト)、ODP.NETでは、他のパラメータより前に戻り値がまずバインドされることが想定されています。

この項の内容は次のとおりです。

データ型BINARY_FLOATおよびBINARY_DOUBLE

Oracle Database 10g以上のデータベースでは、BINARY_FLOATおよびBINARY_DOUBLEという2つの新しいネイティブ・データ型がサポートされています。

BINARY_FLOATおよびBINARY_DOUBLEデータ型はそれぞれ、単精度浮動小数点値と倍精度小数点値を表します。

OracleParameterバインドでは、アプリケーションは、BINARY_FLOATおよびBINARY_DOUBLEデータ型には、OracleDbType.BinaryFloatおよびOracleDbType.BinaryDoubleの列挙を使用する必要があります。

OracleDbTypeの列挙型

OracleDbTypeの列挙値は、OracleParameterオブジェクトのOracleDbTypeを明示的に指定する際に使用されます。

表3-3に、OracleDbTypeの列挙値と、それぞれの列挙値の説明を示します。

表3-3 OracleDbType列挙値

メンバー名 説明

BFile

Oracle BFILE

BinaryFloat

Oracle BINARY_FLOAT

BinaryDouble

Oracle BINARY_DOUBLE

Blob

Oracle BLOB

Byte

byte

Char

Oracle CHAR

Clob

Oracle CLOB

Date

Oracle DATE

Decimal

Oracle NUMBER

Double

8バイトのFLOAT

Int16

2バイトのINTEGER

Int32

4バイトのINTEGER

Int64

8バイトのINTEGER

IntervalDS

Oracle INTERVAL DAY TO SECOND

IntervalYM

Oracle INTERVAL YEAR TO MONTH

Long

Oracle LONG

LongRaw

Oracle LONG RAW

NChar

Oracle NCHAR

Object

Oracleオブジェクト型

NClob

Oracle NCLOB

NVarchar2

Oracle NVARCHAR2

NestedTable

Oracleネスト表型

Raw

Oracle RAW

Ref

Oracle REF

RefCursor

Oracle REF CURSOR

Single

4バイトのFLOAT

TimeStamp

Oracle TIMESTAMP

TimeStampLTZ

Oracle TIMESTAMP WITH LOCAL TIME ZONE

TimeStampTZ

Oracle TIMESTAMP WITH TIME ZONE

Varchar2

Oracle VARCHAR2

Varray

Oracle VARRAY

XmlType

Oracle XMLType


DbType、OracleDbTypeおよび.NETタイプの判断

この項では、OracleParameterクラス内のSystem.Data.DbTypeOracleDbTypeおよびValueのプロパティからの判断を説明します。

OracleParameterクラスでは、DbTypeOracleDbTypeおよびValueプロパティはリンクされています。これらのプロパティのいずれかに値を指定すると、残りの1つ以上のプロパティの値を推測できます。

OracleDbTypeからのDbTypeの判断

OracleParameterクラスでは、OracleDbTypeの値を指定すると、表3-4に示すように、DbTypeの値が判断されます。

表3-4 OracleDbTypeからのSystem.Data.DbTypeの判断

OracleDbType System.Data.DbType

BFile

Object

Blob

Object

BinaryFloat

Single

BinaryDouble

Double

Byte

Byte

Char

StringFixedLength

Clob

Object

Date

Date

Decimal

Decimal

Double

Double

Int16

Int16

Int32

Int32

Int64

Int64

IntervalDS

TimeSpan

IntervalYM

Int64

Long

String

LongRaw

Binary

NChar

StringFixedLength

NClob

Object

NestedTable

Object

NVarchar2

String

Object

Object

Raw

Binary

Ref

Object

RefCursor

Object

Single

Single

TimeStamp

DateTime

TimeStampLTZ

DateTime

TimeStampTZ

DateTime

Varchar2

String

Varray

Object

XmlType

String


DbTypeからのOracleDbTypeの判断

OracleParameterクラスでは、DbTypeの値を指定すると、表3-5に示すように、OracleDbTypeの値が判断されます。

表3-5 DbTypeからのOracleDbTypeの判断

System.Data.DbType OracleDbType

Binary

Raw

Boolean

サポート対象外

Byte

Byte

Currency

サポート対象外

Date

Date

DateTime

TimeStamp

Decimal

Decimal

Double

Double

Guid

サポート対象外

Int16

Int16

Int32

Int32

Int64

Int64

Object

Object

Sbyte

サポート対象外

Single

Single

String

Varchar2

StringFixedLength

Char

Time

TimeStamp

UInt16

サポート対象外

UInt32

サポート対象外

Uint64

サポート対象外

VarNumeric

サポート対象外


ValueからのDbTypeおよびOracleDbTypeの判断

OracleParameterクラスでは、Valueは任意のNET Frameworkデータ型またはODP.NETタイプになるオブジェクト・タイプです。OracleParameterクラスにOracleDbTypeプロパティおよびDbTypeプロパティが指定されていない場合、OracleDbTypeプロパティはValueプロパティのタイプから推測されます。

表3-6は、Valueのタイプが.NETフレームワーク・データ型の1つである場合の、ValueプロパティからのDbTypeおよびOracleDbTypeプロパティの判断を示します。

表3-6 Value(.NETデータ型)からのDbTypeおよびOracleDbTypeの判断

Value(.NETデータ型) System.Data.DbType OracleDbType

Byte

Byte

Byte

Byte[]

Binary

Raw

Char / Char []

String

Varchar2

DateTime

DateTime

TimeStamp

Decimal

Decimal

Decimal

Double

Double

Double

Float

Single

Single

Int16

Int16

Int16

Int32

Int32

Int32

Int64

Int64

Int64

Single

Single

Single

String

String

Varchar2

TimeSpan

TimeSpan

IntervalDS



注意:

DbTypeまたはOracleDbTypeを指定せずに、OracleParameterの値としてその他の.NETフレームワーク・データ型を使用すると、例外が発生します。これは、その他の.NETフレームワーク・データ型からのDbTypeプロパティおよびOracleDbTypeプロパティの判断がサポートされていないためです。

表3-7は、ValueのタイプがOracle.DataAccess.Types型の1つである場合の、Valueプロパティから判断されたDbTypeおよびOracleDbTypeプロパティを示します。

表3-7 Value(ODP.NETデータ型)からのDbTypeおよびOracleDbTypeの判断

Value(Oracle.DataAccess.Types) System.Data.DbType OracleDbType

OracleBFile

Object

BFile

OracleBinary

Binary

Raw

OracleBlob

Object

Blob

OracleClob

Object

Clob

OracleDate

Date

Date

OracleDecimal

Decimal

Decimal

OracleIntervalDS

Object

IntervalDS

OracleIntervalYM

Int64

IntervalYM

OracleRefCursor

Object

RefCursor

OracleString

String

Varchar2

OracleTimeStamp

DateTime

TimeStamp

OracleTimeStampLTZ

DateTime

TimeStampLTZ

OracleTimeStampTZ

DateTime

TimeStampTZ

OracleXmlType

String

XmlType


PL/SQL連想配列バインド

ODP.NETは、PL/SQL連想配列(従来のPL/SQL索引付き表)バインドをサポートしています。

アプリケーションは、OracleParameterオブジェクトをPL/SQL連想配列としてPL/SQLストアド・プロシージャにバインドできます。次のOracleParameterプロパティは、この機能に使用されます。

  • CollectionType

    このプロパティは、PL/SQL連想配列にバインドするために、OracleCollectionType.PLSQLAssociativeArrayに設定する必要があります。

  • ArrayBindSize

    このプロパティは、固定長の要素タイプ(Int32など)の場合は無視されます。

    可変長の要素タイプ(Varchar2など)の場合、ArrayBindSizeプロパティ内の各要素は、Valueプロパティ内の対応する要素のサイズを指定します。

    Outputパラメータ、InputOutputパラメータおよび戻り値の場合、このプロパティは、可変長の変数に対して指定する必要があります。

  • ArrayBindStatus

    このプロパティは、OracleParameter.Valueプロパティ内の各要素の実行ステータスを指定します。

  • Size

    このプロパティは、PL/SQL連想配列にバインドされる要素の最大数を指定します。

  • Value

    このプロパティは、値の配列にNULLまたはDBNull.Valueを設定する必要があります。

PL/SQL連想配列の例

この例では、3つのOracleParameterオブジェクトをPL/SQL連想配列としてバインドします。Param1Inパラメータ、Param2InputOutputパラメータ、Param3Outputパラメータとしてバインドします。

PL/SQLパッケージ: MYPACK

/* Setup the tables and required PL/SQL:

   connect scott/tiger@oracle
   CREATE TABLE T1(COL1 number, COL2 varchar2(20));

   CREATE or replace PACKAGE MYPACK AS
     TYPE AssocArrayVarchar2_t is table of VARCHAR(20) index by BINARY_INTEGER;
     PROCEDURE TestVarchar2(
       Param1 IN     AssocArrayVarchar2_t,
       Param2 IN OUT AssocArrayVarchar2_t,
       Param3    OUT AssocArrayVarchar2_t);
     END MYPACK;
/

   CREATE or REPLACE package body MYPACK as
     PROCEDURE TestVarchar2(
       Param1 IN     AssocArrayVarchar2_t,
       Param2 IN OUT AssocArrayVarchar2_t,
       Param3    OUT AssocArrayVarchar2_t)
     IS
     i integer;
     BEGIN
       -- copy a few elements from Param2 to Param1\n
       Param3(1) := Param2(1);
       Param3(2) := NULL;
       Param3(3) := Param2(3);
       -- copy all elements from Param1 to Param2\n
       Param2(1) := Param1(1);
       Param2(2) := Param1(2);
       Param2(3) := Param1(3);
       -- insert some values to db\n
       FOR i IN 1..3 LOOP
         insert into T1 values(i,Param2(i));
       END LOOP;
     END TestVarchar2;
   END MYPACK;
/
 */

// C#

using System;
using System.Data;
using Oracle.DataAccess.Client;

class AssociativeArraySample
{
  static void Main()
  {
    OracleConnection con = new OracleConnection();

    con.ConnectionString = "User Id=scott;Password=tiger;Data Source=oracle";
    con.Open();
    Console.WriteLine("Connected to Oracle" + con.ServerVersion);

    OracleCommand cmd = new OracleCommand(
      "begin MyPack.TestVarchar2(:1, :2, :3); end;", con);

    OracleParameter Param1 = cmd.Parameters.Add("1", OracleDbType.Varchar2);
    OracleParameter Param2 = cmd.Parameters.Add("2", OracleDbType.Varchar2);
    OracleParameter Param3 = cmd.Parameters.Add("3", OracleDbType.Varchar2);

    Param1.Direction = ParameterDirection.Input;
    Param2.Direction = ParameterDirection.InputOutput;
    Param3.Direction = ParameterDirection.Output;

    // Specify that we are binding PL/SQL Associative Array
    Param1.CollectionType = OracleCollectionType.PLSQLAssociativeArray;
    Param2.CollectionType = OracleCollectionType.PLSQLAssociativeArray;
    Param3.CollectionType = OracleCollectionType.PLSQLAssociativeArray;

    // Setup the values for PL/SQL Associative Array
    Param1.Value = new string[3] {
      "First Element", "Second Element ", "Third Element "
    };
    Param2.Value = new string[3] {
      "First Element", "Second Element ", "Third Element "
    };
    Param3.Value = null;

    // Specify the maximum number of elements in the PL/SQL Associative Array
    Param1.Size = 3;
    Param2.Size = 3;
    Param3.Size = 3;

    // Setup the ArrayBindSize for Param1
    Param1.ArrayBindSize = new int[3] { 13, 14, 13 };

    // Setup the ArrayBindStatus for Param1
    Param1.ArrayBindStatus = new OracleParameterStatus[3] {
      OracleParameterStatus.Success, OracleParameterStatus.Success,
      OracleParameterStatus.Success};

    // Setup the ArrayBindSize for Param2
    Param2.ArrayBindSize = new int[3] { 20, 20, 20 };

    // Setup the ArrayBindSize for Param3
    Param3.ArrayBindSize = new int[3] { 20, 20, 20 };

    // execute the cmd
    cmd.ExecuteNonQuery();

    //print out the parameter's values
    Console.WriteLine("parameter values after executing the PL/SQL block");
    for (int i = 0; i < 3; i++)
      Console.WriteLine("Param2[{0}] = {1} ", i,
        (cmd.Parameters[1].Value as Array).GetValue(i));

    for (int i = 0; i < 3; i++)
      Console.WriteLine("Param3[{0}] = {1} ", i,
        (cmd.Parameters[2].Value as Array).GetValue(i));

    // Close and Dispose OracleConnection object
    con.Close();
    con.Dispose();
    Console.WriteLine("Disconnected");
  }
}

配列バインド

配列バインド機能を使用すると、アプリケーションでは、OracleParameterクラスを使用してタイプの配列をバインドできます。配列バインド機能を使用すると、アプリケーションは、1回のデータベース・ラウンドトリップで複数の行を表に挿入できます。

次のコード例は、1回のデータベース・ラウンドトリップで3行をDept表に挿入します。OracleCommand ArrayBindCountプロパティは、文の実行時に使用する配列の要素の数を定義します。

// C#

using System;
using System.Data;
using Oracle.DataAccess.Client;

class ArrayBindSample
{
  static void Main()
  {
    OracleConnection con = new OracleConnection();
    con.ConnectionString = "User Id=scott;Password=tiger;Data Source=oracle;";
    con.Open();
    Console.WriteLine("Connected successfully");

    int[] myArrayDeptNo = new int[3] { 10, 20, 30 };
    OracleCommand cmd = new OracleCommand();

    // Set the command text on an OracleCommand object
    cmd.CommandText = "insert into dept(deptno) values (:deptno)";
    cmd.Connection = con;

    // Set the ArrayBindCount to indicate the number of values
    cmd.ArrayBindCount = 3;

    // Create a parameter for the array operations
    OracleParameter prm = new OracleParameter("deptno", OracleDbType.Int32);

    prm.Direction = ParameterDirection.Input;
    prm.Value = myArrayDeptNo;

    // Add the parameter to the parameter collection
    cmd.Parameters.Add(prm);

    // Execute the command
    cmd.ExecuteNonQuery();
    Console.WriteLine("Insert Completed Successfully");

    // Close and Dispose OracleConnection object
    con.Close();
    con.Dispose();
  }
}


参照:

詳細は、「Value」を参照してください。

OracleParameterの配列バインド・プロパティ

OracleParameterクラスは、配列バインド機能を使用するときに、詳細な制御を行うために2つのプロパティを提供します。

  • ArrayBindSize

    ArrayBindSizeプロパティは、配列内の対応する各値の最大サイズを指定する整数の配列です。ArrayBindSizeプロパティは、OracleParameterSizeプロパティに類似していますが、ArrayBindSizeプロパティは配列内の各値のサイズを指定するという点が異なります。

    アプリケーションは、実行前にArrayBindSizeプロパティを移入する必要があります。ODP.NETは、実行後にArrayBindSizeプロパティを移入します。

    ArrayBindSizeプロパティは、ClobBlobVarchar2など、可変長のパラメータ・タイプにのみ使用されます。Unicode文字列タイプのバイナリ・データ型および文字の場合、サイズはバイトで表されます。文字列タイプのカウントには、終了文字は含まれません。サイズが明示的に設定されていない場合、値の実際のサイズから推測されます。出力パラメータの場合、それぞれの値のサイズはODP.NETにより設定されます。固定長のデータ型の場合、ArrayBindSizeプロパティは無視されます。

  • ArrayBindStatus

    ArrayBindStatusプロパティは、パラメータの配列内の対応する各値のステータスを指定するOracleParameterStatus値の配列です。このプロパティは、OracleParameterStatusプロパティに類似していますが、ArrayBindStatusプロパティは配列内の各値のステータスを指定するという点が異なります。

    アプリケーションは、実行前にArrayBindStatusプロパティを移入する必要があります。ODP.NETは、実行後に移入します。ArrayBindStatusプロパティを使用するアプリケーションは、実行前に、パラメータの配列内の対応する要素にNULL値を指定できます。ODP.NETは、実行後にArrayBindStatusプロパティを移入して、配列内の対応する要素にNULL値があるか、または値がフェッチされたときにデータの切捨てが発生したかどうかを示します。

配列バインドのエラー処理

配列バインドの実行中にエラーが発生した場合、Valueプロパティ内のどの要素がエラーの原因になったかを判断するのは困難です。ODP.NETは、エラーが発生した行を判断する方法を提供することで、エラーの原因になった行の要素を簡単に検索できるようにします。

配列バインドの実行中にOracleExceptionオブジェクトがスローされた場合、OracleErrorCollectionには1つ以上のOracleErrorオブジェクトが含まれます。これらのOracleErrorオブジェクトはそれぞれ、実行中に発生した個別のエラーを表し、プロバイダ固有のプロパティArrayBindIndexを含みます。このプロパティは、エラーが発生した行番号を示します。

次に配列バインドのエラー処理の例を示します。

/* Database Setup
connect scott/tiger@oracle
drop table depttest;
create table depttest(deptno number(2));
*/

// C#

using System;
using System.Data;
using Oracle.DataAccess.Client;

class ArrayBindExceptionSample
{
  static void Main()
  {
    OracleConnection con = new OracleConnection();
    con.ConnectionString = "User Id=scott;Password=tiger;Data Source=oracle;";
    con.Open();

    OracleCommand cmd = new OracleCommand();

    // Start a transaction
    OracleTransaction txn = con.BeginTransaction(IsolationLevel.ReadCommitted);

    try
    {
      int[] myArrayDeptNo = new int[3] { 10, 200000, 30 };
      // int[] myArrayDeptNo = new int[3]{ 10,20,30};

      // Set the command text on an OracleCommand object
      cmd.CommandText = "insert into depttest(deptno) values (:deptno)";
      cmd.Connection = con;

      // Set the ArrayBindCount to indicate the number of values
      cmd.ArrayBindCount = 3;

      // Create a parameter for the array operations
      OracleParameter prm = new OracleParameter("deptno", OracleDbType.Int32);

      prm.Direction = ParameterDirection.Input;
      prm.Value = myArrayDeptNo;

      // Add the parameter to the parameter collection
      cmd.Parameters.Add(prm);

      // Execute the command
      cmd.ExecuteNonQuery();
    }
    catch (OracleException e)
    {
      Console.WriteLine("OracleException {0} occured", e.Message);
      if (e.Number == 24381)
        for (int i = 0; i < e.Errors.Count; i++)
          Console.WriteLine("Array Bind Error {0} occured at Row Number {1}",
            e.Errors[i].Message, e.Errors[i].ArrayBindIndex);

      txn.Commit();
    }
    cmd.Parameters.Clear();
    cmd.CommandText = "select count(*) from depttest";

    decimal rows = (decimal)cmd.ExecuteScalar();

    Console.WriteLine("{0} row have been inserted", rows);
    con.Close();
    con.Dispose();
  }
}


参照:

詳細は、「ArrayBindIndex」を参照してください。

OracleParameterStatusの列挙型

表3-8は、OracleParameterStatusの列挙値のリストです。

表3-8 OracleParameterStatusメンバー

メンバー名 説明

Success

入力パラメータの場合、入力値が列に割り当てられたことを示します。

出力パラメータの場合、プロバイダによってそのままの値がパラメータに割り当てられたことを示します。

NullFetched

NULL値が列またはOUTパラメータからフェッチされたことを示します。

NullInsert

NULL値が列に挿入されることを示します。

Truncation

列からデータをフェッチする際に切捨てが行われたことを示します。


文キャッシング

文キャッシングにより、最初の実行で作成されたサーバー・カーソルのキャッシングによる実行の前に、各SQL文またはPL/SQL文を解析する必要がなくなります。同じ文を後で実行する場合、カーソルから解析された情報を再利用して、文を解析せずに実行することで、パフォーマンスが向上します。

文キャッシングによるパフォーマンスの向上を得るために、繰り返し実行される文のみをキャッシュすることをお薦めします。さらに、SQL文またはPL/SQL文では、リテラル値ではなくパラメータを使用してください。これにより、文キャッシングが有効になります。これは、後続の実行でパラメータ値が異なる場合でも、パラメータ化された文から解析された情報は再利用できるためです。ただし、文のリテラル値が異なる場合、解析された情報は、後続の文にも同じリテラル値がないかぎり、再使用できません。

文キャッシングの接続文字列属性

次の接続文字列属性は、ODP.NET文キャッシング機能の動作を制御します。

  • Statement Cache Size

    この属性は、ODP.NET文キャッシングを有効化または無効化します。デフォルトでは、この属性は10に設定され、ODP.NET文キャッシングは有効です。0に設定した場合、属性は無効になります。0より大きい値に設定した場合、ODP.NET文キャッシングが有効になり、指定された値は、接続用にキャッシュできる文の最大数として使用されます。指定された最大キャッシュ・サイズまで接続がキャッシュされると、最低使用頻度のカーソルが解放され、新しく作成されたカーソルをキャッシュするためのスペースが確保されます。

  • Statement Cache Purge

    この属性は、接続がクローズされた場合、または接続プールに戻された場合にキャッシュされるすべての文を消去する方法を提供します。デフォルトでは、この属性はfalseに設定されています。つまり、接続がプールに戻されてもカーソルは解放されません。

レジストリを使用した文キャッシングの有効化

アプリケーションを変更せずに、システムで実行しているすべてのODP.NETアプリケーションの文キャッシングをデフォルトで有効化するには、HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\ODP.NET\Assembly_Version \StatementCacheSizeのレジストリ・キーを0より大きい値に設定しますこの値は、サーバーでキャッシュされるカーソルの数を指定します。デフォルトでは、この値は10に設定されています。

システムのデフォルト値は接続プール・レベルで無効にできます。Statement Cache Size属性をレジストリ値と異なるサイズに設定するか、またはこの属性をオフにできます。

文キャッシングのメソッドおよびプロパティ

次のプロパティおよびメソッドは、文キャッシングが有効な場合のみ当てはまります。

  • OracleCommand.AddToStatementCacheプロパティ

    文キャッシングが有効な場合、このプロパティをtrueに設定すると、文の実行時にキャッシュに文が追加されます。文キャッシングが無効な場合、またはこのプロパティがfalseに設定されている場合、実行された文はキャッシュされません。

  • OracleConnection.PurgeStatementCacheメソッド

    このメソッドは、特定の接続に関連付けられたデータベースでオープンしているカーソルをすべてクローズすることで、キャッシュされた文をすべて消去します。このコールの後も、文キャッシングは有効です。

接続と文キャッシング

文キャッシングは、接続ごとに個別に管理されます。このため、異なる接続で同じ文を実行するには、接続ごとに1回消去して、接続ごとに個別のカーソルをキャッシュする必要があります。

プーリングと文キャッシング

プーリングと文キャッシングは同時に使用できます。接続プーリングが有効で、Statement Cache Purge属性がfalseに設定されている場合、個別の接続で実行される文は、プールされた接続の存続期間を通じてキャッシュされます。

Statement Cache Purge属性がtrueに設定されている場合、接続がプールに戻されたときに、キャッシュされたすべてのカーソルが解放されます。接続プーリングが無効な場合、カーソルは接続の存続中にキャッシュされますが、OracleConnectionオブジェクトがクローズまたは処理されたときにカーソルもクローズされます。