COPY
存储过程用于将源内部 LOB
的全部或一部分复制到目标内部 LOB
。
您可以指定源 LOB
和目标 LOB
的偏移量,以及要复制的字节数或字符数。
语法
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 | 复制目标的 |
src_lob | 复制源的 |
amount | 要复制的字节数( |
dest_offset | 复制起始地址在目标 |
src_offset | 复制起始地址在源 |
异常情况
异常 | 描述 |
---|---|
VALUE_ERROR | 任何输入参数均为 |
INVALID_ARGVAL | 发生以下某种情况:
|
QUERY_WRITE | 无法在查询中执行 |
BUFFERING_ENABLED | 如果在 |
使用说明
如果目标
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
。