---
title: OceanBase ROWID 兼容性介绍-OceanBase数据库使用指南
description: 了解OceanBase数据库在实际应用中关于 OceanBase ROWID 兼容性介绍相关的常见问题和使用技巧，帮助您快速解决 OceanBase ROWID 兼容性介绍的难题。
---
切换语言

- 简体中文
- English

划线反馈

# OceanBase ROWID 兼容性介绍

更新时间：2026-05-18 09:11

适用版本： V3.1.x、V3.2.x 内容类型：TechNote  

对于 Oracle 数据库而言，ROWID 是标识 Oracle 数据库中表数据的标识符，通过这个定长的 18 个字节的字符，我们可以获取数据对象编号、对应文件编号、块编号、行编号，以达到快速访问特定行数据的目的。 ​ OceanBase 的数据库表为索引组织表，本质上而言，并没有 ROWID 的概念。此处的 ROWID 仅是基于主键表的主键而拼装的字符串而已，对 ROWID 的访问，可还原成对主键的访问。

## 适用版本

OceanBase 数据库 V3.x 版本。

## OceanBase 数据库 ROWID 验证

1. 创建测试表 TEST_TABLE_RANGE_A 在 U_LXL 库中执行如下语句。

   ```shell
    obclient > CREATE TABLE "U_LXL"."TEST_TABLE_RANGE_A" (
        "ID" NUMBER NOT NULL,
        "NUM" NUMBER NOT NULL,
        "DAT" DATE NOT NULL,
        "STR" VARCHAR2(200 BYTE) NOT NULL,
        CONSTRAINT "PK_TEST_TABLE_RANGE_A" PRIMARY KEY ("ID", "DAT", "STR")
    )
    PARTITION BY RANGE ("DAT")
    (
        PARTITION "PAR_2023_01" VALUES LESS THAN (TO_DATE(' 2023-02-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN')),
        PARTITION "PAR_2023_02" VALUES LESS THAN (TO_DATE(' 2023-03-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN')),
        PARTITION "PAR_2023_03" VALUES LESS THAN (TO_DATE(' 2023-04-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN')),
        PARTITION "PAR_2023_04" VALUES LESS THAN (TO_DATE(' 2023-05-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN')),
        PARTITION "PAR_2023_05" VALUES LESS THAN (TO_DATE(' 2023-06-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN')),
        PARTITION "PAR_2023_06" VALUES LESS THAN (TO_DATE(' 2023-07-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN')),
        PARTITION "PAR_2023_07" VALUES LESS THAN (TO_DATE(' 2023-08-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN')),
        PARTITION "PAR_2023_08" VALUES LESS THAN (TO_DATE(' 2023-09-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN')),
        PARTITION "PAR_2023_09" VALUES LESS THAN (TO_DATE(' 2023-10-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN')),
        PARTITION "PAR_2023_10" VALUES LESS THAN (TO_DATE(' 2023-11-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN')),
        PARTITION "PAR_2023_11" VALUES LESS THAN (TO_DATE(' 2023-12-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN')),
        PARTITION "PAR_2023_12" VALUES LESS THAN (TO_DATE(' 2024-01-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN')),
        PARTITION "PART_MAX" VALUES LESS THAN (TO_DATE(' 9999-12-31 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN'))
    );

    Query OK, 0 rows affected (0.071 sec)

   ```
 2. 创建测试表 TEST_TABLE_RANGE_B 在 U_LXL 库中并且表结构与 TEST_TABLE_RANGE_A 完全一致。
 3. 两表插入相同的记录。

      1. 插入 TEST_TABLE_RANGE_A 执行如下语句。

        ```shell
        obclient > INSERT INTO "U_LXL"."TEST_TABLE_RANGE_A" values(1,0,'2023-01-01 00:00:00','a');
        Query OK, 1 row affected (0.002 sec)

        ```

        提交插入数据。

        ```shell
        obclient > COMMIT;
        Query OK, 0 rows affected (0.000 sec)

        ```
      2. 插入 TEST_TABLE_RANGE_B 执行如下语句。

        ```shell
        obclient > INSERT INTO "U_LXL"."TEST_TABLE_RANGE_B" values(1,0,'2023-01-01 00:00:00','a');
        Query OK, 1 row affected (0.004 sec)

        ```

        提交插入数据。

        ```
 4. 查询记录的 ROWID 值。

      1. 查询 TEST_TABLE_RANGE_A 表的 ROWID 值，执行如下语句。

        ```shell
        obclient > SELECT id,rowid FROM  "U_LXL"."TEST_TABLE_RANGE_A" WHERE id=1;

        ```

        输出结果如下。

        ```shell
        +----+---------------------------------------+
        | ID | ROWID                                 |
        +----+---------------------------------------+
        |  1 | *AAEPAQEAwAEAAAARAEANhCjxBQAWVwEAAABh |
        +----+---------------------------------------+
        1 row in set (0.022 sec)

        ```
      2. 查询 TEST_TABLE_RANGE_B 表的 ROWID 值，执行如下语句。

        ```shell
        obclient [SYS]> SELECT id,rowid FROM "U_LXL"."TEST_TABLE_RANGE_B" WHERE id=1;

        ```

        输出结果如下。

        ```shell
        +----+---------------------------------------+
        | ID | ROWID                                 |
        +----+---------------------------------------+
        |  1 | *AAEPAQEAwAEAAAARAEANhCjxBQAWVwEAAABh |
        +----+---------------------------------------+
          1 row in set (0.027 sec)

        ```
 5. 同一表中 ROWID 值的变化。

      1. 向 TEST_TABLE_RANGE_A 插入数据，执行如下语句。

        ```shell
        obclient > INSERT INTO "U_LXL"."TEST_TABLE_RANGE_A" values(2,0,'2023-05-01 00:00:00',lpad('a',200));
        Query OK, 1 row affected (0.005 sec)

        ```

        提交插入数据。

        ```
      2. 查询 TEST_TABLE_RANGE_A 表的 ROWID 值的变化。

        ```shell
        obclient > select id,length(rowid)  from  "U_LXL"."TEST_TABLE_RANGE_A";

        ```

        输出结果如下。

        ```shell
        +----+---------------+
        | ID | LENGTH(ROWID) |
        +----+---------------+
        |  2 |           305 |
        |  1 |            37 |
        +----+---------------+
          2 rows in set (0.006 sec)

        ```  

   #### 说明

   此时，再插入一条数据，OceanBase 数据库的 ROWID 是变长的，同一个表两条记录，一个 ROWID 长 37，另一个值长 305。

Previous

[OceanBase 数据库 MySQL 模式 LONGTEXT 字段兼容问题](https://www.oceanbase.com/knowledge-base/oceanbase-database-1000000000207745)

Next

[type nclob not supported 问题处理](https://www.oceanbase.com/knowledge-base/oceanbase-database-1000000000207708) ![有帮助](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) 咨询热线
