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は取得されません。