gpt4 book ai didi

Oracle 在具有数字数据类型的列中保存小数

转载 作者:行者123 更新时间:2023-12-05 08:53:53 24 4
gpt4 key购买 nike

我有一个表,其中一列的数据类型为 number(20)。在其中一种情况下,我需要将一个十进制值保存到列中,但该列会自动将其转换为整数。下面是我创建的一个简单的测试表来测试这个场景。

create table test_tbl
(
amt number(20)
)

insert into test_tbl values (9.999)

上面插入的值是 10 而不是 9.999。我怎样才能原封不动地保存 9.999?

谢谢

最佳答案

在 Oracle 中,您可以(但不是必须)为数据类型为 NUMBER 的列指定精度和小数位数。 NUMBER(20)NUMBER(20,0) 的有效简写,表示 20 位数字,小数点后

如何修复取决于您的需要。通常 NUMBER 列应该简单地声明为 NUMBER。仅当您有充分理由时才指定精度和比例。

例如:如果您的数字必须限制在小数点前不超过 20 位且不超过小数点后六位(小数点后),则总 PRECISION 为 20 + 6 = 26。您将声明NUMBER(26, 6)

您可以将声明为 NUMBER(20) 的列更改为 NUMBER(如果满足您的需求),因为此更改不会丢失信息。但是,请注意,已经保存在列中的数字具有已经丢失的信息,无法从表中恢复;如果您需要修复它,您将需要转到这些数字的原始来源。

简要演示(注意在最后一个输出中,更改前插入的行的值永远更改为 10,并且无法恢复):

create table test_tbl
(
amt number(20)
);

insert into test_tbl values (9.999);

select * from test_tbl;

AMT
---
10

alter table test_tbl modify (amt number);

insert into test_tbl values (9.999);

select * from test_tbl;

AMT
-----
10
9.999

关于Oracle 在具有数字数据类型的列中保存小数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52106510/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com