OracleRef
インスタンスは、データベース内にある永続的でスタンドアロンの参照可能なオブジェクトを参照するOracle REF
を表します。OracleRef
オブジェクトは、Oracle REF
を挿入、更新および削除するメソッドを提供します。
クラスの継承
System.Object
System.MarshalByRefObject
Oracle.DataAccess.Types.OracleRef
宣言
// C# public sealed class OracleRef : MarshalByRefObject,ICloneable, IDisposable, INullable
要件
プロバイダ | ODP.NET管理対象外ドライバ |
アセンブリ | Oracle.DataAccess.dll |
ネームスペース | Oracle.DataAccess.Types |
.NET Framework | 3.5, 4.0, 4.5 |
スレッド安全性
パブリック静的メソッドはスレッドセーフですが、インスタンス・メソッドではスレッド安全性は保証されません。
備考
データベース内の同一のOracleオブジェクトを参照する2つ以上のOracleRef
オブジェクトが、同一のOracleConnection
を介して取得される場合、参照オブジェクトでの操作を同期化する必要があります。
OracleRef
メンバーは次の表にリストされています。
OracleRefコンストラクタ
OracleRef
コンストラクタを、表16-30に示します。
OracleRef静的フィールド
OracleRef静的メソッドを、表16-31にリストします。
OracleRef静的メソッド
OracleRef
静的メソッドを、表16-32にリストします。
OracleRefインスタンス・プロパティ
OracleRef
インスタンス・プロパティを、表16-33にリストします。
表16-33 OracleRefインスタンス・プロパティ
プロパティ | 説明 |
---|---|
|
|
|
|
|
|
|
Oracle |
|
|
|
このOracle |
OracleRefインスタンス・メソッド
OracleRef
インスタンス・メソッドを、表16-34にリストします。
表16-34 OracleRefインスタンス・メソッド
メソッド | 説明 |
---|---|
|
|
|
データベースから参照オブジェクトを削除します |
|
|
|
|
|
データベースへの |
|
カスタム・タイプとして指定されたREF参照オブジェクトを戻します(オーバーロード) |
|
カスタム・タイプとして指定されたREF参照オブジェクトを戻します(オーバーロード) |
|
|
|
|
|
2つの |
|
データベースの |
|
|
|
指定カスタム・オブジェクトを使用して、データベースの指定された |
OracleRef
コンストラクタでは、OracleRef
クラスの新規インスタンスをインスタンス化します。
オーバーロード・リスト:
OracleRef(OracleConnection, string)
このコンストラクタでは、データベースのREF
インスタンスを表す接続文字列および16進文字列を使用してOracleRef
クラスのインスタンスを作成します。
OracleRef(OracleConnection, string, string)
このコンストラクタでは、指定したOracleConnection
オブジェクト、ユーザー定義のタイプ名およびオブジェクト表名を使用してOracleRef
クラスのインスタンスを作成します
このコンストラクタでは、データベースのREF
インスタンスを表す接続文字列および16進文字列を使用してOracleRef
クラスのインスタンスを作成します。
宣言
// C# public OracleRef(OracleConnection con, string hexStr);
パラメータ
con
OracleConnection
インスタンス。
hexStr
データベース内のREF
インスタンスを表す16進文字列。
例外
ArgumentException
- 16進文字列がデータベース内の有効なREF
を表しません。
ArgumentNullException
- 接続文字列または16進文字列はNULLです。
InvalidOperationException
- OracleConnection
オブジェクトがオープンされていません
備考
OracleRef
インスタンスが作成されると、データベース内の特定の表を参照します。
接続は、アプリケーションによって明示的にオープンされる必要があります。OracleRef
では、接続を暗黙的にオープンしません。
このコンストラクタでは、指定したOracleConnection
オブジェクト、ユーザー定義のタイプ名およびオブジェクト表名を使用してOracleRef
クラスのインスタンスを作成します。
宣言
// C# public OracleRef(OracleConnection con, string udtTypeName, string objTabName);
パラメータ
con
OracleConnection
インスタンス。
udtTypeName
ユーザー定義のタイプ名。
objTabName
オブジェクト表名。
例外
ArgumentException
- オブジェクト・タイプ名およびオブジェクト表名が無効です。
ArgumentNullException
- オブジェクト・タイプ名およびオブジェクト表名がNULLです。
InvalidOperationException
- OracleConnection
オブジェクトがオープンされていません
備考
OracleRef
インスタンスが作成されると、このOracleRef
インスタンスは、データベース内の特定の表に関連付けられます。つまり、永続的なREF
を表します。
このコンストラクタはオブジェクト表への参照を作成します。ただし、オブジェクトがデータベースにフラッシュされないかぎり、つまり、OracleRef.Flush
またはOracleConnection.FlushCache
メソッドがOracleRef
接続でコールされないかぎり、データベース表にエントリは作成されません。このため、データベースからオブジェクトの最新のコピーのロックまたはフェッチなど、オブジェクトをフラッシュする前にオブジェクトのデータベース・コピーで操作しようとするとOracleException
となります。
接続は、アプリケーションによって明示的にオープンされる必要があります。OracleRef
では、接続を暗黙的にオープンしません。
OracleRef
静的フィールドを、表16-35にリストします。
OracleRef
インスタンス・プロパティを、表16-37にリストします。
表16-37 OracleRefインスタンス・プロパティ
プロパティ | 説明 |
---|---|
|
|
|
|
|
|
|
Oracle |
|
|
|
このOracle |
このインスタンス・プロパティは、OracleRef
で使用される接続を参照します。
宣言
// C# public OracleConnection Connection{get;}
プロパティ値
REF
に関連したOracleConnection
オブジェクト。
例外
ObjectDisposedException
- オブジェクトはすでに処理されています。
備考
Dispose
メソッドが呼び出されると、このプロパティはnull
に設定されます。
このインスタンス・プロパティは、オブジェクト・キャッシュでOracle REF
が参照するオブジェクト内にデータベースにフラッシュされる変更があるかどうかを示します。
宣言
// C# public bool HasChanges {get;}
プロパティ値
オブジェクト・キャッシュでOracle REF
が参照するオブジェクトにデータベースにフラッシュされる変更がある場合、true
を戻します。それ以外の場合は、false
を戻します。
例外
ObjectDisposedException
- オブジェクトはすでに処理されています。
備考
このプロパティは、オブジェクト・キャッシュ内の参照オブジェクトのコピーが更新または削除された場合、true
を戻します。
オブジェクト・キャッシュ内の参照オブジェクトのコピーがない場合、データベース内の参照オブジェクトの最新のコピーが、オブジェクト・キャッシュでキャッシュされ、false
が戻されます。
このインスタンス・プロパティは、REF
がロックされるかどうかを示します。
宣言
// C# public bool IsLocked {get;}
プロパティ値
REF
がロックされる場合、true
を戻します。それ以外の場合、false
を戻します。
例外
ObjectDisposedException
- オブジェクトはすでに処理されています。
このインスタンス・プロパティは、Oracle REF
がNULL
かどうかを示します。
宣言
// C# public bool IsNull {get;}
プロパティ値
REF
がNULL
の場合、trueを戻します。それ以外の場合、falseを戻します。
例外
ObjectDisposedException
- オブジェクトはすでに処理されています。
備考
Oracle REF
がNULL
の場合、このプロパティはtrueを戻します。それ以外の場合、falseを戻します。
このインスタンス・プロパティでは、REF
に関連付けられた完全修飾のオブジェクト表名を戻します。
宣言
// C# public string ObjectTableName{get;}
プロパティ値
REF
に関連付けられた完全修飾のオブジェクト表名。
例外
ObjectDisposedException
- オブジェクトはすでに処理されています。
備考
オブジェクト表名の形式は、schema_Name.Table_Name
です。
OracleRef
インスタンス・メソッドを、表16-38にリストします。
表16-38 OracleRefインスタンス・メソッド
メソッド | 説明 |
---|---|
|
|
|
データベースから参照オブジェクトを削除します |
|
|
|
|
|
データベースへの |
|
カスタム・タイプとして指定されたREF参照オブジェクトを戻します(オーバーロード) |
|
カスタム・タイプとして指定されたREF参照オブジェクトを戻します(オーバーロード) |
|
|
|
|
|
2つの |
|
データベースの |
|
|
|
指定カスタム・オブジェクトを使用して、データベースの指定された |
このインスタンス・メソッドはREF
を複製します。
宣言
// C# public OracleRef Clone();
戻り値
現在のインスタンスの複製。
実装
ICloneable
例外
InvalidOperationException
- 関連する接続がオープンされていません。
このメソッドは、データベースから参照オブジェクトを削除します。
宣言
// C#
public void Delete(bool bFlush);
パラメータ
bFlush
ただちにREF
をフラッシュするかどうか指定するbool
。
備考
このメソッドは、削除する指定済REF
をマークします。
bFlush
の値をtrue
またはfalse
に設定すると、次のようになります。
True
指定したREF
が参照するオブジェクトは、データベースからただちに削除されます。
オブジェクトをフラッシュする前に、アプリケーションはOracleConnection
オブジェクト上でBeginTransaction
メソッドを実行して明示的にトランザクションを開始する必要があります。これは、フラッシュされるオブジェクトがアプリケーションによりロックされていない場合は、オブジェクトに対して暗黙的に排他的ロックが取得されるためです。ロックが解除されるのは、トランザクションがコミットまたはロールバックする場合にかぎります。
False
後続のFlush
メソッドが指定されたREF
に対して呼び出される場合や、FlushCache
メソッドがOracleRef
で呼び出される場合、またはFlushCache
メソッドがOracleRef
接続で呼び出される場合にかぎり、REF
が参照するオブジェクトはデータベースからただちに削除されません。
関連項目: |
このインスタンス・メソッドは、OracleRef
インスタンスに割り当てられたリソースを解放します。
宣言
// C# public void Dispose();
実装
IDisposable
備考
オブジェクトは、処理後は再度使用できません。アクセスできるプロパティはありますが、それらの値は最新ではない可能性があります。
このインスタンス・メソッドは、データベースのREF
オブジェクトで行った更新または削除などの変更をフラッシュします。
宣言
// C# public void Flush();
例外
InvalidOperationException
- 関連する接続がオープンされていません。
備考
オブジェクトをフラッシュする前に、アプリケーションはOracleConnection
オブジェクト上でBeginTransaction
メソッドを実行して明示的にトランザクションを開始する必要があります。これは、フラッシュされるオブジェクトがアプリケーションによりロックされていない場合は、オブジェクトに対して暗黙的に排他的ロックが取得されるためです。ロックが解除されるのは、トランザクションがコミットまたはロールバックする場合にかぎります。
GetCustomObject
メソッドは、カスタム・タイプとして指定したREFが参照するオブジェクトを戻します。
オーバーロード・リスト
GetCustomObject(OracleUdtFetchOption)
このメソッドは、指定したフェッチ・オプションを使用して、カスタム・タイプとして指定したREFが参照するオブジェクトを戻します。
GetCustomObject(OracleUdtFetchOption, int)
このメソッドは、指定したフェッチ・オプションおよび深さレベルを使用して、カスタム・タイプとして指定したREF
が参照するオブジェクトを戻します。
このメソッドは、指定したフェッチ・オプションを使用して、REF
が参照するオブジェクトをカスタム・タイプとして戻します。
宣言
// C#
public object GetCustomObject(OracleUdtFetchOption fetchOption);
パラメータ
fetchOption
OracleUdtFetchOption
値。
戻り値
指定したREF
が参照するオブジェクトを表すカスタム・オブジェクト。
例外
InvalidOperationException
- 指定した接続がオープンされていないか、有効なカスタム・タイプが参照オブジェクトのタイプに登録されていません。
備考
このメソッドは、指定した接続でのUDTマッピングにより定義されたカスタム・タイプを戻します。
接続は、アプリケーションによって明示的にオープンされる必要があります。このメソッドでは、接続を暗黙的にオープンしません。
アプリケーションではOracleUdtFetchOption
メソッドを使用して、指定したオプションに従って戻されるオブジェクトのコピーを制御できます。
OracleUdtFetchOption.Cache
オプション
このオプションが指定され、オブジェクト・キャッシュに参照オブジェクトのコピーがある場合、コピーがただちに戻されます。キャッシュのコピーが存在しない場合、データベース内の参照オブジェクトの最新のコピーが、オブジェクト・キャッシュでキャッシュされ、戻されます。
OracleUdtFetchOption.Server
オプション
このオプションが指定されると、データベースから参照したオブジェクトの最新のコピーは、オブジェクト・キャッシュでキャッシュされ、戻されます。キャッシュに参照オブジェクトのコピーがすでに存在する場合、最新のコピーは既存のコピーを上書きします。
OracleUdtFetchOption.TransactionCache
オプション
このオプションが指定され、参照したオブジェクトのコピーが現行のトランザクションでキャッシュされると、コピーが戻されます。それ以外の場合は、データベースからの参照オブジェクトの最新のコピーは、オブジェクト・キャッシュでキャッシュされ、戻されます。キャッシュに参照オブジェクトのコピーがすでに存在する場合、最新のコピーは既存のコピーを上書きします。
参照オブジェクトのキャッシュ済コピーが現行のトランザクションが開始される前に変更された場合、つまり、OracleRef.HasChanges
プロパティがtrue
を戻す場合、Recent
オプションによって参照オブジェクトのキャッシュ済コピーが戻されることに注意してください。トランザクションの外では、Recent
オプションはAny
オプションと同様の動作をします。
このメソッドは、指定したフェッチ・オプションおよび深さレベルを使用して、カスタム・タイプとして指定したREF
が参照するオブジェクトを戻します。
宣言
// C#
public object GetCustomObject(OracleUdtFetchOption fetchOption, int depthLevel);
パラメータ
fetchOption
OracleUdtFetchOption
値。
depthLevel
ネストされたREF
属性にフェッチされるレベルの数。
戻り値
指定したREF
が参照するオブジェクトを表すカスタム・オブジェクト。
例外
InvalidOperationException
- 指定した接続がオープンされていないか、有効なカスタム・タイプが参照オブジェクトのタイプに登録されていません。
備考
このメソッドは、指定した接続でのUDTマッピングにより定義されたカスタム・タイプを戻します。
REF
が参照するオブジェクトに、ネストされたREF
属性が含まれる場合、depthLevel
を指定して後続のオブジェクトの取得を最適化できます。depthLevel
の値によって最適化されるレベルの数が定義されます。
たとえば、depthLevel
を2に指定する場合、最適化は、フェッチされるオブジェクト内のすべてのネストされた最上位レベルのREF
属性に適用され、また、すべてのネストされた最上位レベルのREF
属性が参照するオブジェクト内のすべてのネストされたREF属性にも適用されます。
接続は、アプリケーションによって明示的にオープンされる必要があります。このメソッドでは、接続を暗黙的にオープンしません。
アプリケーションではOracleUdtFetchOption
メソッドを使用して、指定したオプションに従って戻されるオブジェクトのコピーを制御できます。
OracleUdtFetchOption.Cache
オプション
このオプションが指定され、オブジェクト・キャッシュに参照オブジェクトのコピーがある場合、コピーがただちに戻されます。キャッシュのコピーが存在しない場合、データベース内の参照オブジェクトの最新のコピーが、オブジェクト・キャッシュでキャッシュされ、戻されます。
OracleUdtFetchOption.Server
オプション
このオプションが指定されると、データベースから参照したオブジェクトの最新のコピーは、オブジェクト・キャッシュでキャッシュされ、戻されます。キャッシュに参照オブジェクトのコピーがすでに存在する場合、最新のコピーは既存のコピーを上書きします。
OracleUdtFetchOption.TransactionCache
オプション
このオプションが指定され、参照したオブジェクトのコピーが現行のトランザクションでキャッシュされると、コピーが戻されます。それ以外の場合は、データベースからの参照オブジェクトの最新のコピーは、オブジェクト・キャッシュでキャッシュされ、戻されます。キャッシュに参照オブジェクトのコピーがすでに存在する場合、最新のコピーは既存のコピーを上書きします。
参照オブジェクトのキャッシュ済コピーが現行のトランザクションが開始される前に変更された場合、つまり、OracleRef.HasChanges
プロパティがtrue
を戻す場合、Recent
オプションによって参照オブジェクトのキャッシュ済コピーが戻されることに注意してください。トランザクションの外では、Recent
オプションはAny
オプションと同様の動作をします。
GetCustomObjectForUpdate
メソッドは、カスタム・タイプとして指定したREFが参照するオブジェクトを戻します。
GetCustomObjectForUpdate(bool)
このメソッドは、データベース内で指定したREF
をロックし、指定したwaitオプションを使用して、カスタム・タイプとして指定したREF
を参照するオブジェクトを戻します。
GetCustomObjectForUpdate(bool, int)
このメソッドは、データベース内で指定したREF
をロックし、指定したwaitオプションおよび深さレベルを使用して、カスタム・タイプとして指定したREF
を参照するオブジェクトを戻します。
このメソッドは、データベース内で指定したREF
をロックし、指定したwaitオプションを使用して、カスタム・タイプとして指定したREF
が参照するオブジェクトを戻します。
宣言
// C#
public object GetCustomObjectForUpdate(bool bWait);
パラメータ
bWait
REF
がno-waitオプションでロックされるかどうかを指定します。waitがtrue
に設定されている場合、このメソッドを起動しても、REF
がロックされるまで値は戻りません。
戻り値
指定したREF
が参照するオブジェクトを表すカスタム・オブジェクト。
例外
InvalidOperationException
- 指定した接続がオープンされていないか、有効なカスタム・タイプが参照オブジェクトのタイプに登録されていません。
OracleException
- bWaitが
false
に設定されており、ロックを取得できません。
備考
このメソッドは、OracleRef
接続で登録したカスタム・タイプで定義した参照オブジェクトの最新のコピーをカスタム・タイプとして戻します。
OracleRef
のFlush
またはOracleConnection
のFlushCache
メソッドを使用してREF
をフラッシュした後、REF
で適切にロックを解除するには、アプリケーションはトランザクションをコミットまたはロールバックする必要があります。このため、このメソッドを呼び出す前に、OracleConnection
オブジェクトでBeginTransaction
メソッドを実行して、明示的にトランザクションを開始する必要があります。
このメソッドはネットワーク・ラウンドトリップを作成してデータベース内のREF
をロックします。このコールの後、プログラマは関連付けられた行オブジェクトを排他的に変更できます。その後で、OracleRef
のFlush
メソッドまたはOracleConnection
のFlushCache
メソッドへのコールを実行すると、データベースへの変更がフラッシュされます。
true
が渡されると、このメソッドはロックが取得されるまでブロックされます。false
が渡される場合は、このメソッドはただちに値を戻します。ロックが取得できない場合は、OracleException
がスローされます。
接続は、アプリケーションによって明示的にオープンされる必要があります。このメソッドでは、接続を暗黙的にオープンしません。
このメソッドは、データベース内で指定したREF
をロックし、指定したwaitオプションおよび深さレベルを使用して、カスタム・タイプとして指定したREF
が参照するオブジェクトを戻します
宣言
public object GetCustomObjectForUpdate(bool bWait, int depthlevel);
パラメータ
bWait
no-waitオプションでREF
がロックされるかどうかを指定するブール値。waitがtrue
に設定されている場合、このメソッドを起動しても、REF
がロックされるまで値は戻りません。
depthLevel
ネストされたREF
属性にフェッチされるレベルの数。
戻り値
指定したREF
が参照するオブジェクトを表すカスタム・オブジェクト。
例外
InvalidOperationException
- 指定した接続がオープンされていないか、有効なカスタム・タイプが参照オブジェクトのタイプに登録されていません。
OracleException
- bWaitが
false
に設定されており、ロックを取得できません。
備考
このメソッドは、OracleRef
接続で登録したカスタム・タイプで定義した参照オブジェクトの最新のコピーをカスタム・タイプとして戻します。
OracleRef
のFlush
またはOracleConnection
のFlushCache
メソッドを使用してREF
をフラッシュした後、REF
で適切にロックを解除するには、アプリケーションはトランザクションをコミットまたはロールバックする必要があります。このため、このメソッドを呼び出す前に、OracleConnection
オブジェクトでBeginTransaction
メソッドを実行して、明示的にトランザクションを開始する必要があります。
このメソッドはネットワーク・ラウンドトリップを作成してデータベース内のREF
をロックします。このコールの後、プログラマは関連付けられた行オブジェクトを排他的に変更できます。その後で、OracleRef
のFlush
メソッドまたはOracleConnection
のFlushCache
メソッドへのコールを実行すると、データベースへの変更がフラッシュされます。
true
が渡されると、このメソッドはロックが取得されるまでブロックされます。false
が渡される場合は、このメソッドはただちに値を戻します。ロックが取得できない場合は、OracleException
がスローされます。
REF
が参照するオブジェクトに、ネストされたREF
属性が含まれる場合、depthLevel
を指定して後続のオブジェクトの取得を最適化できます。depthLevel
の値によって最適化されるレベルの数が定義されます。
たとえば、depthLevel
を2
に指定する場合、最適化は、フェッチされるオブジェクト内のすべてのネストされた最上位レベルのREF
属性に適用され、また、すべてのネストされた最上位レベルのREF
属性が参照するオブジェクト内のすべてのネストされたREF
属性にも適用されます。
接続は、アプリケーションによって明示的にオープンされる必要があります。このメソッドでは、接続を暗黙的にオープンしません。
このインスタンス・メソッドは、2つのOracleREF
オブジェクトを比較します。
宣言
// C#
public bool IsEqual(OracleRef oraRef);
パラメータ
oraRef
指定されたOracleRef
オブジェクト。
戻り値
bool
備考
OracleRef
インスタンスおよびOracleRef
パラメータの両方が同じオブジェクトを参照する場合、このインスタンス・メソッドは、true
を戻します。それ以外の場合、false
を戻します。
このインスタンス・メソッドは、データベース内のREF
をロックします。
宣言
// C#
public bool Lock(bool bWait);
パラメータ
bWait
ロックがno-waitオプションに設定されるかどうかを指定します。bWait
がtrue
に設定されている場合、このメソッドを呼び出してもREF
がロックされるまで値は戻りません。
戻り値
ロックが取得されているかどうかを示すブール値。
例外
InvalidOperationException
- 関連する接続がオープンされていません。
ObjectDisposedException
- オブジェクトはすでに処理されています。
備考
OracleRef
のFlush
起動またはFlushCache
メソッドの後に、アプリケーションで適切にREF
のロックを解除するには、アプリケーションがトランザクションをコミットまたはロールバックする必要があります。このため、OracleRef
オブジェクトのロックを起動する前に、OracleConnection
オブジェクトのBeginTransaction
メソッドを明示的に実行する必要があります。
このインスタンス・メソッドは、ネットワーク・ラウンドトリップを作成して、データベース内のREF
をロックします。このコールの後、プログラマは、関連した行オブジェクトの属性値を排他的に変更できます。OracleRef
のFlush
インスタンス・メソッドまたはOracleConnection
のFlushCache
メソッドへのコールにより、データベースへの変更がフラッシュされます。
true
が渡されると、ロックが取得されるまでこのメソッドはブロックされ、値を戻しません。結果として、戻り値は常にtrue
になります。
false
が渡される場合は、このメソッドはただちに値を戻します。ロックが取得されると戻り値はtrue
を示し、ロックが取得されない場合は、戻り値はfalse
を示します。
このメソッドは、指定したカスタム・オブジェクトを使用して、データベース内で指定したREF
が参照するオブジェクトを更新します。
宣言
// C# public void Update(object customObject, bool bFlush);
パラメータ
customObject
参照オブジェクトの更新に使用されるカスタム・オブジェクト。
bFlush
変更をただちにフラッシュする必要がある場合に指定するブール値。bFlush
がtrueに設定されている場合、このメソッドの起動により変更はだたちにフラッシュされます。
例外
InvalidOperationException
- 指定した接続がオープンされていないか、カスタム・オブジェクトが参照オブジェクトのタイプにマップされません。
備考
このメソッドは、更新に指定したREF
をマークします。bFlush
の値がtrueまたはfalseに設定されると、次のようになります。
True
指定したREF
が参照するオブジェクトは、データベース内でただちに更新されます。
オブジェクトをフラッシュする前に、アプリケーションはOracleConnection
オブジェクト上でBeginTransaction
メソッドを実行して明示的にトランザクションを開始する必要があります。これは、フラッシュされるオブジェクトがアプリケーションによりロックされていない場合は、オブジェクトに対して暗黙的に排他的ロックが取得されるためです。ロックが解除されるのは、トランザクションがコミットまたはロールバックする場合にかぎります。
False
後続のFlush
メソッドが指定されたREF
に対して呼び出される場合、またはFlushCache
メソッドが指定された接続に対して呼び出される場合にかぎり、REF
が参照するオブジェクトは、データベース内でただちに更新されません。
接続は、アプリケーションによって明示的にオープンされる必要があります。このメソッドでは、接続を暗黙的にオープンしません。