18c 与 19c 上的 Oracle 编号问题

Posted

技术标签:

【中文标题】18c 与 19c 上的 Oracle 编号问题【英文标题】:Oracle Number issue on 18c vs 19c 【发布时间】:2020-02-15 02:01:17 【问题描述】:

需要确认以下两个 Oracle 版本(18c 与 19c)上的 NUMBER 数据类型的行为,

在 18c 中,

select cast(0.003856214813393653 as number(20,18)) from dual;

--输出

0.00385621481339365

在 19c 中,

select cast(0.003856214813393653 as number(20,18)) from dual;

--输出

0.003856214813393653

为什么18c会截断最后一位?

这是版本问题吗?

Plus 18c 似乎无法处理超过 17 的比例值。

【问题讨论】:

无法在 Oracle 18c 上复制您的输出 db<>fiddle 我也没有在我的 18c XE 实例上得到断言。您确定这不是客户端显示问题吗? 您使用哪个工具来执行查询? 【参考方案1】:

这与 Oracle / PLSQL 开发者工具设置问题有关。请尝试使用以下选项来解决相同问题

工具 -> 首选项 -> SQL 窗口 -> 数字字段 to_char

【讨论】:

【参考方案2】:

这是 client 设置而不是数据库的突发奇想。例如,我在同一个数据库上运行所有这些

SQL Plus
========
SQL> select cast(0.003856214813393653 as number(20,18)) from dual;

CAST(0.003856214813393653ASNUMBER(20,18))
-----------------------------------------
                               .003856215

SQL Developer
=============
select cast(0.003856214813393653 as number(20,18)) from dual;

0.003856214813393653

SQLcl
======
SQL> select cast(0.003856214813393653 as number(20,18)) from dual;

CAST(0.003856214813393653ASNUMBER(20,18))
-----------------------------------------
                             .00385621481

客户端工具决定显示的精度

【讨论】:

以上是关于18c 与 19c 上的 Oracle 编号问题的主要内容,如果未能解决你的问题,请参考以下文章

Migrating Oracle 18c To 19c

Oracle数据库18c升级到19c

Oracle 19c: RAC 集群技术的坚持与放弃(含PPT下载)

Oracle 12c 多租户家族(12c 18c 19c)如何在 PDB 中添加 HR 模式

Oracle数据库安装配置详细教程汇总(含11g12c18c19c21c)

Oracle update to 19c using DBUA