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