COPY ステートメントは、ソースの内部 LOB の一部または全部をターゲットの内部 LOB にコピーするために使用されます。
ソース LOB とターゲット LOB のオフセット、およびコピーするバイト数または文字数を指定できます。
適用対象
この内容はOceanBaseデータベースEnterprise Editionにのみ適用されます。OceanBaseデータベースCommunity EditionはMySQLモードのみを提供します。
構文
DBMS_LOB.COPY (
dest_lob IN OUT NOCOPY BLOB,
src_lob IN BLOB,
amount IN INTEGER,
dest_offset IN INTEGER := 1,
src_offset IN INTEGER := 1);
DBMS_LOB.COPY (
dest_lob IN OUT NOCOPY CLOB CHARACTER SET ANY_CS,
src_lob IN CLOB CHARACTER SET ANY_CS,
amount IN INTEGER,
dest_offset IN INTEGER := 1,
src_offset IN INTEGER := 1);
パラメータの説明
| パラメータ | 説明 |
|---|---|
| dest_lob | コピー先の LOB ポインター。 |
| src_lob | コピー元の LOB ポインター。 |
| amount | コピーするバイト数(BLOB)または文字数(CLOB)。 |
| dest_offset | コピー開始アドレスがターゲット LOB 内でのオフセット量(バイトまたは文字単位、原点は1)。 |
| src_offset | コピー開始アドレスがソース LOB 内でのバイトまたは文字(原点は1)のオフセット量。 |
異常時
| 異常 | 説明 |
|---|---|
| VALUE_ERROR | 入力パラメータがすべてNULLまたは無効です。 |
| INVALID_ARGVAL | 次のいずれかの状況が発生した場合:
|
| QUERY_WRITE | クエリでLOB書き込みを実行できません。 |
| BUFFERING_ENABLED | LOBにバッファリングが有効になっている場合、LOBバッファリングが有効な状態で操作を実行することはできません。 |
使用方法
ターゲット
LOBで指定されたオフセットが、このLOB内の現在データの末尾を超える場合、ターゲットBLOBまたはCLOBにゼロバイトの埋め込み文字またはスペースがそれぞれ挿入されます。オフセットがターゲットLOBの現在の長さより小さい場合、既存のデータが上書きされます。指定された数がソース
LOB内のデータ長を超えてもエラーは報告されません。そのため、ソースLOBからコピーするデータを多数指定することができ、これによりsrc_offsetからソースLOBの末尾までのすべてのデータがコピーされます。LOB操作をOpen/Closeインターフェースで囲むことは必須ではありません。操作実行前にLOBを開いていない場合、呼び出し中にLOB列上の機能インデックスとドメインインデックスが更新されます。ただし、操作実行前にLOBを開いている場合は、トランザクションをコミットする前に閉じる必要があります。内部LOBを閉じる際には、LOB列上の機能インデックスとドメインインデックスも同時に更新されます。LOB操作をOpen/Closeインターフェースで囲まない場合、LOBへの書き込みごとに機能インデックスとドメインインデックスが更新されます。パフォーマンスへの影響を避けるため、LOBへの書き込み操作はOPENまたはCLOSEステートメント内に含めることを推奨します。コピー前に、ソースおよびターゲット
LOBがアーカイブされている場合は、まずそれらを検索します。完全カバレッジの場合、ターゲットLOBは検索されません。