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操作に使用されるバッファ・キャッシュを指定するメカニズムもあります。このインタフェースでは、これらの機能はサポートされていません。
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です。