WRITE
存储过程用于将指定数量的数据写入内部 LOB
(从以 LOB
开头的绝对偏移量开始计算)。
数据是从 buffer
参数写入的。WRITE
以指定的长度替换(覆盖)LOB
偏移量中已存在的任何数据。
语法
DBMS_LOB.WRITE (
lob_loc IN OUT NOCOPY BLOB,
amount IN INTEGER,
offset IN INTEGER,
buffer IN RAW);
DBMS_LOB.WRITE (
lob_loc IN OUT NOCOPY CLOB CHARACTER SET ANY_CS,
amount IN INTEGER,
offset IN INTEGER,
buffer IN VARCHAR2 CHARACTER SET ANY_CS);
参数解释
参数 | 解释 |
---|---|
lob_loc | 要写入的内部 |
amount | 要写入的字节数(对于 |
offset | 开始读取 |
buffer | 用于写的输入缓冲区。 |
异常情况
异常 | 描述 |
---|---|
VALUEERROR |
|
INVALID_ARGVAL | 可能为以下几种情况:
|
QUERY_WRITE | 无法在查询或 PDML 并行执行服务器内执行 |
BUFFERING_ENABLED | 如果在 |
SECUREFILE_OUTOFBOUNDS | 尝试执行写操作并略过标有 |
使用说明
如果输入量大于缓冲区中的数据,则会出现错误。如果输入量小于缓冲区中的数据,仅将缓冲区中的字节或字符量写入
LOB
。如果指定的偏移量超出了LOB
中当前数据的末位,则将零字节填充符或空格分别插入BLOB
或CLOB
中。VARCHAR2
缓冲区的形式必须与CLOB
参数的形式匹配。也就是说,如果输入LOB
参数的类型为CLOB
,则缓冲区必须包含CHAR
数据。从客户端调用
DBMS_LOB.WRITE
时,缓冲区必须包含客户端字符集中的数据。在将缓冲区数据写入LOB
之前,数据库会将客户端缓冲区转换为服务器的字符集。不强制要求将
LOB
操作包裹在 Open/Close 接口中。如果在执行操作之前没有打开LOB
,在调用过程中会更新LOB
列上的功能索引和域索引。如果在执行操作之前打开了LOB
,必须在提交事务之前将其关闭。在关闭内部LOB
时,将更新LOB
列上的功能索引和域索引。如果未将
LOB
操作包裹在 Open/Close 接口内,每次写入LOB
时都会更新功能索引和域索引。为避免对性能产生不利影响,建议将对LOB
的写操作包含在OPEN
或CLOSE
语句中。必要时,
WRITE
会在写入LOB
之前获取LOB
,除非指定写操作以覆盖整个LOB
。