WRITEAPPEND 存储过程将指定数量的数据写入内部 LOB 的末尾。数据是由 buffer 参数写入的。

语法

  1. DBMS_LOB.WRITEAPPEND (
  2. lob_loc IN OUT NOCOPY BLOB,
  3. amount IN INTEGER,
  4. buffer IN RAW);
  5. DBMS_LOB.WRITEAPPEND (
  6. lob_loc IN OUT NOCOPY CLOB CHARACTER SET ANY_CS,
  7. amount IN INTEGER,
  8. buffer IN VARCHAR2 CHARACTER SET ANY_CS);

参数解释

参数

解释

lob_loc

内部 LOB 要写入的定位符。详细信息请参见 DBMS_LOB 使用说明

amount

要写入的字节数(对于 BLOB)或字符数(对于CLOB)。

buffer

用于写的输入缓冲区。

说明

如果输入量大于缓冲区中的数据,则会出现错误。如果输入量小于缓冲区中的数据,则仅将缓冲区中的字节或字符量写入 LOB 的末尾。

异常情况

Exception

Description

VALUE_ERROR

lob_locamount 或者 offset 参数中的任何一个为 NULL、超出范围或无效。

INVALID_ARGVAL

以下情况之一:

  • amount 小于 1

  • amount 大于 32767 字节(或等价的字符)

QUERY_WRITE

无法在查询或 PDML 并行执行服务器中执行 LOB 写入。

BUFFERING_ENABLED

如果在 LOB 上启用了缓冲,则无法在启用 LOB 缓冲的情况下执行操作。

使用说明

  • VARCHAR 缓冲区的形式必须与 CLOB 参数的形式匹配。如果输入 LOB 参数的类型为 CLOB,则缓冲区必须包含 CHAR 数据。

  • 从客户端调用 DBMS_LOB.WRITEAPPEND 时(例如,在 OBClient 中的 BEGIN / END 块中),缓冲区必须包含客户端字符集中的数据。在将缓冲区数据写入 LOB 之前,数据库会将客户端缓冲区转换为服务器的字符集。

  • 您不必将 LOB 操作包裹在 Open/Close 接口中。如果在执行操作之前没有打开 LOB,则在调用过程中会更新 LOB 列上的功能索引和域索引。但是,如果在执行操作之前打开了 LOB,则必须在提交事务之前将其关闭。关闭内部 LOB 时,将更新 LOB 列上的功能索引和域索引。

  • 如果未将 LOB 操作包裹在 Open/Close API 内,则每次写入 LOB 时都会更新功能索引和域索引。这会对性能产生不利影响。因此,建议您将对 LOB 的写操作包含在 OPENCLOSE 语句中。

  • 必要时,在附加到 LOB 前, 由 WRITEAPPEND 获取 LOB