---
title: "Oracle 租户下使用虚拟列报 ORA-12899: value too large for column-OceanBase数据库使用指南"
description: "了解OceanBase数据库在实际应用中关于 Oracle 租户下使用虚拟列报 ORA-12899: value too large for column相关的常见问题和使用技巧，帮助您快速解决 Oracle 租户下使用虚拟列报 ORA-12899: value too large for column的难题。"
---
切换语言

- 简体中文
- English

划线反馈

# Oracle 租户下使用虚拟列报 ORA-12899: value too large for column

更新时间：2024-01-22 01:56

适用版本： V2.2.x 内容类型：Troubleshoot  

## 问题现象

在 OceanBase 数据库的 Oracle 租户下，创建表的过程中，如果表中存在虚拟列时，报 `ORA-12899: value too large for column` 错误，现象如下。

```shell
obclient [SYS]> CREATE TABLE OBTEST( col1 VARCHAR2(20BYTE) NOT NULL, col2 DATE, SYS_NC00053$ VARCHAR2(5 BYTE) GENERATED ALWAYS AS(TO_CHAR(col2,'MM-dd')) VIRTUAL );
ORA-12899: value too large for column

```

## 问题原因

表达式 `TO_CHAR(col2,'MM-dd')` 的结果，确实是一个 5 字节的字符串，故用 `VARCHAR2(5 BYTE)` 的`GENERATED column` 理论上是可以存储它的，但是 OceanBase 数据库内部对 `GENERATED column` 的要求是要大于等于表达式自身的长度,而不是只检查表达式的结果长度。

## 适用版本

OceanBase 数据库 V2.2.77 版本。

## 解决方法

需要让 `GENERATED column` 的大小大于表达式长度，而不是大于表达式结果的长度。

Previous

[表中一行设置了过期时间，但是时间到了还能查到](https://www.oceanbase.com/knowledge-base/oceanbase-database-1000000000340644)

Next

[通过 ALTER TABLE 为表添加主键报错](https://www.oceanbase.com/knowledge-base/oceanbase-database-20000001005) ![有帮助](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) 咨询热线
