防止小数进入列 - Oracle

时间:2017-08-16 19:37:03

标签: sql oracle oracle11g

我想知道如果数字的值不是整数,是否有办法防止数字类型的数据进入表格。

即。如果数据包含分数或小数,我不想存储数据。我正在使用oracle 11g。尽管将比例定义为0,但oracle会将数字的小数部分舍入为最接近的整数。

非常确定我们必须对列进行某种检查约束,但我不太确定它会是什么。

非常感谢任何帮助。谢谢!

2 个答案:

答案 0 :(得分:2)

对于较小的分数,也许使用float?

(因为将数字加到数字上仅适用于定义的范围)

drop table whole_numbers;
create table whole_numbers(a float);
alter table whole_numbers add constraint check_whole check (a = trunc(a));

insert into whole_numbers values(1);

1 row inserted.

insert into whole_numbers values(1.00002);

ORA-02290: check constraint (VBSMASTER.CHECK_WHOLE) violated
*Cause:    The values being inserted do not satisfy the named check

*Action:   do not insert values that violate the constraint.

答案 1 :(得分:1)

您可以使用check约束:

alter table t add constraint chk_col_int as (col = trunc(col));

但是,将列声明为整数或没有小数位的数字可能更有意义。嗯,这可能不会做你想要的,因为输入的实/浮点数会被转换而不是产生错误。