27.1 ナビゲーショナル関数および型関数の概要
オブジェクト・ナビゲーショナル・パラダイムの中では、データは参照によって接続されたオブジェクトのグラフとして表現されます。
このグラフの中のオブジェクトに到達するには、参照をたどります。OCIは、Oracle Database内のオブジェクトにナビゲーショナル・インタフェースを提供します。この章では、これらのコールについて説明します。
アプリケーションがOCIEnvCreate()
、OCIEnvNlsCreate()
またはOCIInitialize()
(非推奨)をOCI_OBJECT
モードでコールすると、OCIオブジェクト環境は初期化されます。
関連項目:
この章で説明されているコールの使用方法の詳細は、「OCIオブジェクト・リレーショナル・プログラミング」および「OCIのオブジェクトに関する高度なトピック」を参照してください
27.1.1 オブジェクト型と存続期間
オブジェクト・インスタンスは、Oracle Databaseで定義された型の状態変化です。
この項では、OCIでのオブジェクト・インスタンスの記述方法について説明します。OCIでは、オブジェクト・インスタンスは型、存続期間および参照可能性によって次のように分類されます。
-
永続オブジェクトはオブジェクト型のインスタンスの1つです。永続オブジェクトは、サーバー内の表の行中に常駐し、セッション(接続)の継続時間より長く存在できます。永続オブジェクトは、オブジェクト識別子を格納するオブジェクト参照によって識別できます。永続オブジェクトは、そのオブジェクト参照を確保することで取得できます。
-
一時オブジェクトは、オブジェクト型のインスタンスです。一時オブジェクトは、セッション(接続)の継続時間より長く存在することはできず、一時的な計算結果を格納します。一時オブジェクトは、一時オブジェクト識別子を格納する参照によって識別できます。
-
値はユーザー定義型(オブジェクト型またはコレクション型)のインスタンスの1つであるか、組込みOracle型のいずれかです。オブジェクトとは異なり、オブジェクト型の値は、参照ではなくメモリー・ポインタによって識別されます。
値はスタンドアロン値または埋込み値になります。スタンドアロン値は、通常、SELECT文を発行することで取得されます。OCIでは、クライアント・プログラムがSQL文を発行することで、オブジェクト表の行を選択して値に代入することもできます。データベース内の参照可能オブジェクトは、参照によって識別できない値として表現できます。また、スタンドアロン値は、VARCHAR
やRAW
のように、オブジェクト内の表外格納属性にしたり、VARCHAR
、RAW
、オブジェクトのように、コレクション内の表外格納要素にできます。
埋込み値は、格納インスタンス内に物理的に格納されます。埋込み値は、数値やネストしたオブジェクトなどのオブジェクト内の表内格納属性、またはコレクション内の表内格納要素にできます。
すべての値は、OCIでは一時的なものであるとみなされます。つまり、OCIは値のデータベースへの自動フラッシュをサポートしないため、クライアントは、値をデータベースに格納するためのSQL文を明示的に実行する必要があります。埋込み値は、格納インスタンスがフラッシュされるときにフラッシュされます。
図27-1に、インスタンスの型と存続期間による分類方法を示します。型には、オブジェクトまたはオブジェクトの値を指定できます。存続期間には、永続(セッションの継続時間より長く存在できる)または一時(セッションの継続時間より長く存在できない)を指定できます。
各インスタンスの違いを、表27-1に示します。
表27-1 インスタンスの型と存続期間
特性 | 永続オブジェクト | 一時オブジェクト | 値 |
---|---|---|---|
型 |
オブジェクト型 |
オブジェクト型 |
オブジェクト型、組込み、コレクション |
最長存続期間 |
オブジェクトが削除されるまで |
セッション |
セッション |
参照可能性 |
あり |
あり |
なし |
埋込み可能性 |
なし |
なし |
あり |
27.1.2 用語
使用されている用語について説明します。
この章では、次の用語が使用されます。
-
オブジェクトとは、一般に、永続オブジェクト、一時オブジェクト、オブジェクト型のスタンドアロン値、またはオブジェクト型の埋込み値のことです。
-
参照可能オブジェクトとは、永続オブジェクトまたは一時オブジェクトのことです。
-
スタンドアロン・オブジェクトとは、永続オブジェクト、一時オブジェクト、またはオブジェクト型のスタンドアロン値のことです。
-
埋込みオブジェクトとは、オブジェクト型の埋込み値のことです。
-
オブジェクトは、作成(新規作成)された場合、または更新済や削除済のマークが設定された場合に、使用済と表現されます。
関連項目:
様々なオブジェクト型を指す用語の詳細は、「永続オブジェクト、一時オブジェクトおよび値」を参照してください
27.1.5 ナビゲーショナル関数の戻り値
ナビゲーショナル関数の戻り値について説明します。
表27-2は、 OCIナビゲーショナル関数によって通常戻される値を示しています。
表27-2 ナビゲーショナル関数の戻り値
戻り値 | 意味 |
---|---|
|
操作は成功しました。 |
|
操作は失敗しました。関数に渡されたエラー・ハンドルに対して |
|
関数に渡されたOCIハンドルが無効です。 |
この章では、各関数に関する記述の後で関数固有の戻り値に関する情報を説明します。各関数から戻される特定のエラー・コードに関する情報は、次の項で記述します。
関連項目:
リターン・コードおよびエラー処理の詳細は、「OCIでのエラー処理」を参照してください
27.1.6 キャッシュ関数およびオブジェクト関数用のサーバー・ラウンドトリップ
個々のOCIキャッシュ関数およびオブジェクト関数に必要なサーバー・ラウンドトリップ回数について説明します。
個々のOCIキャッシュ関数およびオブジェクト関数に必要なサーバー・ラウンドトリップ回数を示す表は、表C-4を参照してください。
27.1.7 ナビゲーショナル関数エラー・コード
各OCIナビゲーショナル関数によって戻される外部Oracleエラー・コードについて説明します。
表27-3には、各OCIナビゲーショナル関数によって戻される外部Oracleエラー・コードがリストされています。表の後に各エラーの内容を説明します。
表27-3 OCIナビゲーショナル関数エラー・コード
関数 | 発生する可能性のあるORAエラー |
---|---|
|
24350, 21560, 21705 |
|
24350, 21560, 21705 |
|
24350, 21560, 21705 |
|
24350, 21560, 21705 |
|
24350, 21560, 21705 |
|
24350, 21560 |
|
24350, 21560, 21705, 21710 |
|
24350, 21560, 21710 |
|
24350, 21560, 21701, 21703, 21708, 21710 |
|
24350, 21560, 21603, 21710 |
|
21560, 21600, 22305 |
|
24350, 21560, 21710 |
|
24350, 21560, 21710 |
|
24350, 21560, 21710 |
|
24350, 21560, 21710 |
|
24350, 21560, 21710 |
|
24350, 21560, 21701, 21708, 21710 |
|
24350, 21560, 21701, 21708, 21710 |
|
24350, 21560, 21700, 21701, 21702, 21710 |
|
24350, 21560 |
|
24350, 21560, 21700, 21701, 21710 |
|
24350, 21560, 21705, 21710 |
|
24350, 21560, 21700, 21702 |
|
24350, 21560, 21710 |
|
24350, 21560, 21705 |
|
24350, 21560, 21709, 21710 |
|
21560, 21600, 22305, 22279, 21601 |
|
24350, 21560, 21710 |
|
24350, 21560 |
|
24350, 21560, 21710 |
表27-3のORAエラーは、次のとおりです。
-
ORA-21560 - 引数stringが
NULL
、無効または範囲外です。 -
ORA-21600 - パス式が長すぎます。
-
ORA-21601 - 属性がオブジェクトではありません。
-
ORA-21603 - プロパティID[string]は無効です。
-
ORA-21700 - オブジェクトが存在しないか、削除マークが設定されています。
-
ORA-21701 - 異なるサーバーにオブジェクトをフラッシュしようとしました
-
ORA-21702 - オブジェクトがインスタンス化されていないか、またはキャッシュ内でインスタンス化解除されています
-
ORA-21703 - 変更されていないオブジェクトはフラッシュできません。
-
ORA-21704 - フラッシュを実行しないとキャッシュまたは接続を終了できません。
-
ORA-21705 - サービス・コンテキストが無効です。
-
ORA-21708 - 一時オブジェクトで不適切な操作が行われました。
-
ORA-21709 - 変更されたオブジェクトをリフレッシュできません。
-
ORA-21710 - 引数にはオブジェクトの有効なメモリー・アドレスが必要です。
-
ORA-22279 - LOBバッファリングが使用可能な状態では、操作を実行できません。
-
ORA-22305 - 属性/メソッド/パラメータ"string"が見つかりません。
-
ORA-24350 - OCIコールは使用できません。