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

前
次

LOB文のルール

LOB文を使用するときのルールを説明します。

すべてのLOB文に対するルール

次の一般的な制限および制約は、SQL LOB文を使用してLOBを操作するときに適用されます。

  • EXEC SQL LOB文で使用できるLOBロケータは1つのみのため、EXEC SQL LOB文ではFOR句は使用できません。

  • 分散LOBはサポートされていません。新しい埋込みSQL LOB文ではATデータベース句を使用できますが、同一のSQL LOB文で、異なるデータベース接続を使用して作成またはALLOCATEされたLOBロケータを混在させることはできません。

  • LOB READおよびWRITE操作を行う場合、OCIでは、コールバック関数をクライアントから指定できるコールバック・メカニズムを提供しています。このコールバック関数は、LOB値ピースの読込みあるいは書込みが行われるたびに実行されます。埋込みSQL LOB文では、この機能はサポートされていません。

  • OCIでは、テンポラリLOBを作成するときに使用可能な期間を、独自に作成または指定できるメカニズムを提供しています。テンポラリLOBのREADおよびWRITE操作に使用されるバッファ・キャッシュを指定するメカニズムもあります。このインタフェースでは、これらの機能はサポートされていません。

LOBバッファリング・サブシステムに適用されるルール

LBSでは、次のルールに従う必要があります。

  • 読取りまたは書込みアクセス時のエラーは、次回のサーバーへのアクセス時にレポートされます。このため、エラー・リカバリのコードは、ユーザーが作成する必要があります。

  • バッファへの書込みによりLOBを更新するときは、必ずLOBバッファリング・サブシステムを経由して更新を行ってください。

  • バッファリングが可能な更新済LOBロケータは、INパラメータとしてPL/SQLプロシージャに渡せますが、IN OUTあるいはOUTパラメータとしては渡すことはできません。エラーが戻されます。更新されたロケータを戻そうとしたときも、エラーが戻されます。

  • バッファリング可能な更新済ロケータを、別のロケータにはASSIGNできません。

  • バッファへの書込みをLOB値に追加することができますが、その開始オフセットの1文字は、LOBの最後に続く必要があります。LBSでは、データベース・サーバーのLOBに、0バイトの充填文字または空白が入るAPPEND文は使用できません。

  • ホスト・ロケータのバインド変数のキャラクタ・セットとデータベース・サーバーのCLOBは、同じであることが必要です。

  • ASSIGN、READおよびWRITE文のみ、バッファリング可能なロケータとともに使用できます。

  • バッファリングが使用可能なロケータで、APPEND、COPY、ERASE、DESCRIBE(LENGTHのみ)およびTRIM文を実行するとエラーが発生します。また、これらの文をバッファリング不可能なロケータとともに使用した場合でも、そのロケータによってポイントされたLOBが他のロケータによってバッファ・モードでアクセスされた場合には、エラーが戻されます。

    注意:

    次の処理の前に、LOBバッファリング・サブシステムが使用可能なLOBに対して、FLUSH文を実行する必要があります。

  • トランザクションをコミットするとき。

  • カレント・トランザクションから他のトランザクションへの移行。

  • LOB上でのバッファ操作の使用禁止。

  • 外部プロシージャの実行からPL/SQLルーチンに戻るとき。

    注意:

    PL/SQLブロックからロケータ・パラメータを引数にして外部コールアウトがコールされた場合、ENABLE文を含むすべてのバッファリングは、外部プロシージャ内で行う必要があります。

次の手順に従います。

  • 外部コールアウトを呼び出します。

  • バッファリングのロケータをENABLEします。

  • ロケータを使用してREADまたはWRITEします。

  • LOBに対してFLUSHします(LOBを暗黙的にフラッシュできません)。

  • バッファリングのロケータを使用禁止にします。

  • PL/SQLのファンクション/プロシージャ/メソッドに戻ります。

LOBは、明示的にFLUSHする必要があります。

ホスト変数に適用されるルール

LOB文では、次のルールおよび注意事項に従ってください。

  • srcおよびdstを使用して、内部または外部LOBロケータを参照できますが、fileでは、外部ロケータ以外は参照できません。

  • 数値のホスト値(amt、src_offset、dst_offsetなど)は、4バイトの符号なし整数の変数として宣言されます。値は、0から4GBに制限されています。

  • NULLは、LOBロケータで使用します。LOB文では標識変数は必要ありません。NULLは、数値変数(amt、src_offsetなど)には使用できません。エラーが発生します。

  • オフセット値src_offsetおよびdst_offsetのデフォルト値は1です。