---
title: OceanBase 数据库 Oracle 模式下 nchar 使用 to_number 函数报 Internal error-OceanBase数据库使用指南
description: 了解OceanBase数据库在实际应用中关于 OceanBase 数据库 Oracle 模式下 nchar 使用 to_number 函数报 Internal error相关的常见问题和使用技巧，帮助您快速解决 OceanBase 数据库 Oracle 模式下 nchar 使用 to_number 函数报 Internal error的难题。
---
切换语言

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

划线反馈

# OceanBase 数据库 Oracle 模式下 nchar 使用 to_number 函数报 Internal error

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

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

## 问题描述

OceanBase 数据库 Oracle 模式下 nchar 使用 to_number 函数报 Internal error。

复现场景如下。

1. 创建表。

   ```shell
   obclient > create table tzs (id int,realpayamt nchar(16));
   ues(7,'362087.67 ');
   Query OK, 0 rows affected (0.031 sec)

   ```
 2. 插入数据。

   ```shell
   obclient [SYS]> insert into tzs values(7,'362087.67 ');
   Query OK, 1 row affected (0.013 sec)

   ```
 3. 执行查询语句。

   ```shell
   obclient > select to_number(NVL(REGEXP_REPLACE(realpayamt ,'[^0-9.]', ''),0)) from tzs where id=7;

   ```

   输出结果如下。

   ```shell
   ErrorCode = 600, SQLState = HY000, Details = ORA-00600: internal error code, arguments: -4016, Internal error

   ```

## 适用版本

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

## 问题原因

新执行引擎下，表达式推进过程中重复加隐式 cast 导致报错。

## 临时解决方案

- 使用 cast 规避问题，查询语句如下。

  ```shell
  obclient > select to_number(cast(NVL(REGEXP_REPLACE(realpayamt ,'[^0-9.]', ''),0) as varchar(64))) from tzs where id=7;

  ```

  输出结果如下。

  ```shell
  +------------------------------------------------------------------------------+
  | TO_NUMBER(CAST(NVL(REGEXP_REPLACE(REALPAYAMT,'[^0-9.]',''),0)ASVARCHAR(64))) |
  +------------------------------------------------------------------------------+
  |                                                                    362087.67 |
  +------------------------------------------------------------------------------+
  1 row in set (0.003 sec)

  ```
 - 使用老引擎，执行如下命令。

  ```shell
   obclient> ALTER SYSTEM SET _enable_static_typing_engine = false;

  ```

  #### 注意

  使用老引擎操作属于集群设置，风险偏高，若采用此方法请咨询 OceanBase 技术服务。

上一篇

[使用 sys_connect_by_path() 函数失败，错误码 ORA-00600](https://www.oceanbase.com/knowledge-base/oceanbase-database-20000001052)

下一篇

[函数索引 Session 变量变换导致 SQL 报 -4377](https://www.oceanbase.com/knowledge-base/oceanbase-database-1000000000438552) ![有帮助](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) 咨询热线
