プライマリ・コンテンツに移動
Pro*C/C++プログラマーズ・ガイド
12c リリース1(12.1)
B71397-03
目次へ移動
目次
索引へ移動
索引

前
次

オブジェクトに対する新しいプリコンパイラ・オプション

オブジェクトをサポートするには、次のプリコンパイラ・オプションを使用します。

VERSION

このオプションでは、EXEC SQL OBJECT DEREF文によってどのバージョンのオブジェクトが戻されるかが決まります。これにより、キャッシュ・オブジェクトとサーバー・オブジェクトの間で、一貫性レベルを変更できます。

EXEC ORACLE OPTION文を使用してインラインで設定します。設定できる値は、次のとおりです。

RECENT (デフォルト)

現行のトランザクション内でオブジェクトがオブジェクト・キャッシュに選択されている場合は、そのオブジェクトが戻されます。オブジェクトが選択されていない場合は、サーバーから取り出されます。シリアライズされた状態で実行中のトランザクションの場合、このオプションの動作はVERSION=LATESTと同じですが、ネットワークのラウンドトリップはそれほど多くありません。この値は、ほとんどのPro*C/C++アプリケーションで問題なく使用できます。

LATEST

オブジェクトがオブジェクト・キャッシュに存在しない場合は、データベースから取り出されます。オブジェクト・キャッシュに存在している場合は、サーバーからリフレッシュされます。この値を指定すると、ネットワークのラウンドトリップが増大するため、慎重に使用してください。この値を使用するのは、オブジェクト・キャッシュでサーバー側バッファとできるかぎり一貫性のある状態を保つ必要がある場合です。

ANY

オブジェクトがすでにオブジェクト・キャッシュに存在している場合は、そのオブジェクトが戻されます。オブジェクトがオブジェクト・キャッシュに存在しなければ、サーバーから取り出されます。この値を指定すると、ネットワークのラウンドトリップは最小になります。この値を使用するのは、アプリケーションが読取り専用オブジェクトにアクセスする場合や、ユーザーがオブジェクトに排他的にアクセスする場合です。

DURATION

このプリコンパイラ・オプションは、後続のEXEC SQL OBJECT CREATE文とEXEC SQL OBJECT DEREF文に使用される確保継続時間を設定するときに使用します。キャッシュ内のオブジェクトは、保持期間の終わりに暗黙的に解放されます。

ナビゲーショナル・アクセス用インタフェースでのみ使用します。

このオプションは、EXEC ORACLE OPTION文で設定できます。設定できる値は、次のとおりです。

TRANSACTION (デフォルト)

オブジェクトは、トランザクションの完了時に暗黙的に解放されます。

SESSION

オブジェクトは、接続の終了時に暗黙的に解放されます。

OBJECTS

このプリコンパイラ・オプションを指定すると、オブジェクト・キャッシュを使用できます。

DBMS=NATIVE | V8に対するOBJECTSのデフォルト値はYESです。オブジェクト・キャッシュのデフォルト・サイズは、OCIデフォルト・キャッシュ・サイズと同じく8MBです。

関連項目:

OBJECTS

INTYPE

プログラムでオブジェクト型、コレクション・オブジェクト・タイプまたはREF型を使用する場合は、このコマンドライン・オプションでINTYPEファイルを指定する必要があります。

次の構文で、INTYPEオプションを指定します。

   INTYPE=filename1 INTYPE=filename2 ...

この場合、filename1、filename2...は、OTTで生成された型ファイルの名前です。これらのファイルはPro*C/C++への読取り専用入力ファイルになります。それに含まれる情報は単純なテキスト形式ですが、エンコードされている場合もあり、ユーザーが読める形式になっているとはかぎりません。

Pro*C/C++の1つのプリコンパイル単位に対する入力ファイルとして、複数のINTYPEファイルを指定できます。

このオプションは、EXEC ORACLE文内でインラインで使用することはできません。

OTTは、データベース内で作成されたオブジェクト型を表すC言語の構造体の宣言を生成し、型ファイルと呼ばれるファイルに型の名前とバージョン情報を書き込みます。

オブジェクト型の名前は、それを表すC言語の構造体の型やC++クラスの型と同じであるとはかぎりません。これには、次の理由が考えられます。

  • サーバーに指定されたオブジェクト型の名前に、CまたはC++識別子で無効な文字が含まれている場合

  • ユーザーがOTTに対して、構造体またはクラスに異なる名前を使用するように要求した場合

  • ユーザーがOTTに対して、名前の大文字を小文字に、小文字を大文字に変更するように要求した場合

前述の状況では、構造体やクラスの宣言からは、その構造体やクラスがどのオブジェクト型と一致するかを推論できません。この情報はPro*C/C++に必要であり、OTTによって型ファイル内で生成されます。

ERRTYPE

   ERRTYPE=filename

エラーは、画面のみでなく、指定したファイルにも書き込まれます。このオプションを省略すると、エラーは画面にのみ出力されます。ただし、ERRTYPEは1つしか指定できません。値が1つしかない他のコマンドライン・オプションと同様に、コマンドラインでERRTYPEに複数の値を入力すると、最後の値がすべてに優先します。

このオプションは、EXEC ORACLE文内でインラインで使用することはできません。

オブジェクトに対するSQLCHECKのサポート

各オブジェクト型とその属性は、Oracle型のCバインドに従ってCプログラムに表されます。プリコンパイラ・コマンドライン・オプションSQLCHECKをSEMANTICSまたはFULLに設定すると、Pro*C/C++はプリコンパイル中に、ホスト変数型がデータベース・スキーマ内でその型に必須のCバインドに準拠しているかどうかを検証します。さらに、Oracle型がプログラム実行中に正しくマップされているかどうかを検証するために、常に実行時チェックが行われます。

リレーショナル・データ型は通常の方法でチェックされます。

リレーショナルSQLデータ型とホスト変数型は、両方の型が同一の場合または両方の型の間で変換が可能な場合に、互換性を持ちます。一方、オブジェクト型が互換性を持つのは、両方の型が同一の場合のみです。次のことが必要です。

  • 同じ名前にします。

  • 同じスキーマに含めます(スキーマが明示的に指定されている場合)。

オプションSQLCHECK=SEMANTICSまたはFULLを指定すると、Pro*C/C++はプリコンパイル中に、指定されたユーザーIDとパスワードを使用してデータベースにログインし、構造体の宣言が生成されたオブジェクト型と、埋込みSQL文に使用されたオブジェクト型が同じかどうかを検証します。

実行時のタイプ・チェック

Pro*C/C++は、ある型について、入力INTYPEファイルからオブジェクト、コレクション・オブジェクトおよびREFホスト変数の型の名前とバージョン、可能な場合にはスキーマ情報を収集し、これらの情報を生成したコードに格納します。これにより、実行時にオブジェクトおよびREFバインド変数の型情報にアクセスできます。型が同じでない場合は、固有のエラー・メッセージが戻されます。