---
title: Oracle 模式 TO_NUMBER() 执行报错 ORA-01722 -OceanBase数据库使用指南
description: 了解OceanBase数据库在实际应用中关于 Oracle 模式 TO_NUMBER() 执行报错 ORA-01722 相关的常见问题和使用技巧，帮助您快速解决 Oracle 模式 TO_NUMBER() 执行报错 ORA-01722 的难题。
image: https://mdn.alipayobjects.com/huamei_22khvb/afts/img/A*OSPzQ6GUQF4AAAAAQHAAAAgAeiGDAQ/original
---
切换语言

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

划线反馈

# Oracle 模式 TO_NUMBER() 执行报错 ORA-01722

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

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

## 适用版本

OceanBase 数据库 V2.x、V3.x 版本。

## 问题现象

当 SQL 中包含 TO_NUMBER(column) 且 column 中包含非数字字符串，即使这些非数字字符串的行并不会出现在结果集中，OceanBase 数据库依然会报 invalid number 错误。而在 Oracle 数据库中，则不会报错。

示例如下。

```shell
CREATE TABLE "COM" ( "ID" NUMBER, "ST" VARCHAR2(120) DEFAULT NULL );
insert into "COM"("ID","ST") values(11,'222');
insert into "COM"("ID","ST") values(22,'eee');

```

OceanBase 数据库 V3.2.4 下的执行结果如下。

```shell
obclient [TEST]> select (SELECT TO_NUMBER(a.st) FROM dual where rownum = 0) as aaa,11 from com a where a.id=11;
+------+------+
| AAA  | 11   |
+------+------+
| NULL |   11 |
+------+------+
1 row in set (0.006 sec)

obclient [TEST]> select  (SELECT TO_NUMBER(a.st) FROM dual where rownum = 0) as aaa,22 from com a where a.id=22;
ORA-01722: invalid number

```

OceanBase 数据库 V4.2.1 下的执行结果如下。

obclient [TEST]> select  (SELECT TO_NUMBER(a.st) FROM dual where rownum = 0) as aaa,22 from com a where a.id=22;
+------+------+
| AAA  | 22   |
+------+------+
| NULL |   22 |
+------+------+
1 row in set (0.006 sec)

```

## 问题原因

OceanBase 数据库 V2.x 和 V3.x 版本会最大化抽取 EXEC_PARAM，TO_NUMBER('eee') 不满足函数要求，因此报错。而 Oracle 数据库以及 OceanBase 数据库 V4.x 版本均最小化抽取 EXEC_PARAM，且包含恒 false 条件的子查询会被改写为 Null，因此不会报错。

## 解决方法

在 OceanBase 数据库 V2.x、V3.x 版本中，可以通过修改 SQL，将 TO_NUMBER 从子查询中移动到主查询的方式来绕过该问题。

```shell
obclient [TEST]> select TO_NUMBER((select a.st from dual where rownum=0)) as aaa,22 from com a where a.id=22;
+------+------+
| AAA  | 22   |
+------+------+
| NULL |   22 |
+------+------+
1 row in set (0.004 sec)

```

Previous

[OceanBase 数据库 MySQL 模式下常规 CTE 带有 UNION ALL 时数据类型转换错误](https://www.oceanbase.com/knowledge-base/oceanbase-database-1000000000467871)

Next

[OceanBase 数据库 date 及 datetime 类型 cast 结果和 MySQL 不一致释疑](https://www.oceanbase.com/knowledge-base/oceanbase-database-1000000003039384) ![有帮助](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) 咨询热线
