---
title: "LOB_WRITEAPPEND - OceanBase AI 数据库 V4.6.2 | OceanBase 文档中心"
description: LOB_WRITEAPPEND LOB_WRITEAPPEND 用于在 UPDATE 语句中对 LONGTEXT 或 LONGBLOB 列做追加（流式）写入，以降低大 LOB 写入时的内存压力。同一 LOB 可在一个或多个事务中分多次追加；事务提交后，完整内容对其它会话可见。 说明 该函数从 V4.6.2.1 版本开…
image: https://mdn.alipayobjects.com/huamei_22khvb/afts/img/A*OSPzQ6GUQF4AAAAAQHAAAAgAeiGDAQ/original
---
切换语言

- 中文站 - 简体中文
- International - English
- 日本站 - 日本語

文档反馈![](https://mdn.alipayobjects.com/huamei_22khvb/afts/img/A*w3cwQYKZAJwAAAAAHhAAAAgAeiGDAQ/original) OceanBase AI 数据库V 4.6.2

# LOB_WRITEAPPEND

更新时间：2026-09-15 17:00:16

[编辑](https://github.com/oceanbase/oceanbase-database-ai/edit/V4.6.2/zh-CN/700.reference/500.sql-reference/100.sql-syntax/200.common-tenant-of-mysql-mode/100.basic-elements-of-mysql-mode/100.data-type-of-mysql-mode/500.large-object-of-mysql-mode/450.lob-writeappend-of-mysql-mode.md)  

`LOB_WRITEAPPEND` 用于在 `UPDATE` 语句中对 `LONGTEXT` 或 `LONGBLOB` 列做追加（流式）写入，以降低大 LOB 写入时的内存压力。同一 LOB 可在一个或多个事务中分多次追加；事务提交后，完整内容对其它会话可见。

#### 说明

该函数从 V4.6.2.1 版本开始支持。

## 语法

```sql
UPDATE table_name
SET lob_column = LOB_WRITEAPPEND(lob_column, amount, buffer)
[WHERE condition];

```

## 参数说明

| **参数名称** | **类型** | **说明** |
| --- | --- | --- |
| `lob_column` | `LONGTEXT` 或 `LONGBLOB` | 需要追加写入的目标 LOB 列，须与 `SET` 左侧为同一列。 |
| `amount` | 整数 | 本次追加的数据长度，必须大于 0，且与 `buffer` 的实际长度完全一致。对 `LONGTEXT` 为字符长度；对 `LONGBLOB` 为字节长度。 |
| `buffer` | 字符串、二进制字符串、`LONGTEXT` 或 `LONGBLOB` | 本次需要追加的数据。 |

使用限制与说明如下：

- 必须在 `UPDATE ... SET ...` 中使用。
 - `SET` 后只能有一个赋值语句。
 - 目标 LOB 列仅支持 `LONGTEXT` 和 `LONGBLOB`。
 - 不支持 `MERGE_ENGINE` 为 `delete_insert` 的表。
 - 单次追加数据长度最大约为 512 MB。严格来说，因数据头本身需要占用一定空间，实际上限为 `512 MB - 1 Byte - 48 Byte`，即 `536,870,863` 字节。
 - 累计追加数据长度最大约为 4 TB。严格来说，实际上限为 `4 TB - 1 Byte`，即 `4,398,046,511,103` 字节。
 - 追加写的目标行只能有一行。
 - `LOB_WRITEAPPEND` 的第一个参数（`lob_column`）必须与 `SET` 左侧的 LOB 列相同。
 - 不能嵌套在其他函数中使用。
 - 目标 LOB 列不能为被依赖列，包括索引依赖、`GENERATED` 列、Trigger、`CHECK` 等。
 - 不能用于带 `WITH CHECK OPTION` 的视图（View）。
 - `LOB_WRITEAPPEND` 不是幂等操作：同一语句执行一次与执行多次结果不同，重复执行会重复追加数据。
 - **重试机制**：服务端明确返回失败时，可认为本次追加未生效；若客户端超时、断连或响应丢失，结果不确定，不要直接重试相同语句，否则可能重复追加。重试时可先等待或读取原语句的最终响应，再决定后续操作。

## 示例

本示例展示了如何使用 `LOB_WRITEAPPEND` 将数据多次分片追加到 `LONGTEXT` 列中，并使用 `SUBSTR` 函数分段读取。

```sql
CREATE TABLE stream_store (
  id INT PRIMARY KEY,
  data LONGTEXT
);

START TRANSACTION;
INSERT INTO stream_store VALUES (1, '');
UPDATE stream_store
   SET data = LOB_WRITEAPPEND(data, 3, 'ABC')
 WHERE id = 1;
UPDATE stream_store
   SET data = LOB_WRITEAPPEND(data, 3, 'DEF')
 WHERE id = 1;
UPDATE stream_store
   SET data = LOB_WRITEAPPEND(data, 3, 'GHI')
 WHERE id = 1;
COMMIT;

-- 上述操作全部成功并提交后，等效于：
-- INSERT INTO stream_store VALUES (1, 'ABCDEFGHI');

SELECT data,
       CHAR_LENGTH(data) AS char_len
  FROM stream_store
 WHERE id = 1;

```

返回结果如下：

```sql
+-----------+----------+
| data      | char_len |
+-----------+----------+
| ABCDEFGHI |        9 |
+-----------+----------+
1 row in set

```

使用 `SUBSTR` 函数分段读取数据：

```sql
SELECT SUBSTR(data, 1, 3) AS first_part,
       SUBSTR(data, 4, 3) AS second_part,
       SUBSTR(data, 7, 3) AS third_part
  FROM stream_store
 WHERE id = 1;

```

返回结果如下：

```sql
+------------+-------------+------------+
| first_part | second_part | third_part |
+------------+-------------+------------+
| ABC        | DEF         | GHI        |
+------------+-------------+------------+
1 row in set

```

## 相关文档

- [LOB 类型](https://www.oceanbase.com/docs/common-oceanbase-database-ai-1000000006782208)

 上一篇 下一篇 ![有帮助](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*y6ocSqN8cqsAAAAAAAAAAAAAARQnAQ)![无帮助](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*BG9IQJyLHF8AAAAAAAAAAAAAARQnAQ)![反馈](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*eTWdQKCRKHwAAAAAAAAAAAAAARQnAQ)[AI](https://www.oceanbase.com/obi) 咨询热线
