WRITEAPPEND ステートメントは、指定された数のデータを内部 LOB の末尾に書き込みます。データは buffer パラメータによって書き込まれます。
適用対象
この内容はOceanBaseデータベースEnterprise Editionにのみ適用されます。OceanBaseデータベースCommunity EditionはMySQLモードのみを提供します。
構文
DBMS_LOB.WRITEAPPEND (
lob_loc IN OUT NOCOPY BLOB,
amount IN INTEGER,
buffer IN RAW);
DBMS_LOB.WRITEAPPEND (
lob_loc IN OUT NOCOPY CLOB CHARACTER SET ANY_CS,
amount IN INTEGER,
buffer IN VARCHAR2 CHARACTER SET ANY_CS);
パラメータの説明
| パラメータ | 説明 |
|---|---|
| lob_loc | 内部 LOB に書き込むためのロケーター。詳細については、DBMS_LOB使用方法を参照してください。 |
| amount | 書き込むバイト数(BLOBの場合)または文字数(CLOBの場合)。 |
| buffer | 書き込み用の入力バッファ。 |
説明
入力量がバッファ内のデータより大きい場合、エラーが発生します。入力量がバッファ内のデータより小さい場合、バッファ内のバイトまたは文字数だけが LOB の末尾に書き込まれます。
異常時
| 例外 | 説明 |
|---|---|
| VALUE_ERROR | lob_loc、amount、または offset のいずれかのパラメータが NULL、範囲外、または無効です。 |
| INVALID_ARGVAL | 以下のいずれかの場合:
|
| QUERY_WRITE | クエリまたはPDMLパラレル実行サーバーで LOB 書き込みを実行できません。 |
| BUFFERING_ENABLED | LOB でバッファリングが有効になっている場合、LOB バッファリングを有効にした状態で操作を実行できません。 |
使用方法
VARCHARバッファの形式は、CLOBパラメータの形式と一致していなければなりません。入力されるLOBパラメータのタイプがCLOBの場合、バッファにはCHARデータを含める必要があります。クライアントから
DBMS_LOB.WRITEAPPENDを呼び出す際(例えば、OBClient内のBEGIN/ENDブロック内で)、バッファにはクライアント文字セットのデータを含める必要があります。バッファデータをLOBに書き込む前に、データベースはクライアントバッファをサーバーの文字セットに変換します。LOB操作をOpen/Closeインターフェースでラップする必要はありません。操作実行前にLOBが開かれていない場合、呼び出し中にLOB列上の機能インデックスとドメインインデックスが更新されます。ただし、操作実行前にLOBが開かれている場合は、トランザクションコミット前に閉じる必要があります。内部LOBを閉じると、LOB列上の機能インデックスとドメインインデックスが更新されます。LOB操作をOpen/Close APIでラップしない場合、LOBへの書き込みごとに機能インデックスとドメインインデックスが更新されます。これはパフォーマンスに悪影響を及ぼします。そのため、LOBへの書き込み操作はOPENまたはCLOSEステートメント内に含めることを推奨します。必要に応じて、
LOBに追加する前に、WRITEAPPENDによってLOBを取得します。