我正在使用oracle 10gr2。我正在尝试对称为“分数”的列强制实施约束,以便只能输入分数。

更具体地说,格式应在分子中包含一个数字,在分母中包含一个数字,以便用户只能输入小数,例如3/42/57/8。该列仅接受数字作为输入。谁能告诉我要使用的SQL?

最佳答案

如果我理解正确,我认为执行此操作的正确方法是将数据存储在两列中。如果最上面的数字是用户对问题的实际评分,最下面的数字是可能的评分,这听起来就很有意义,这听起来很像您正在做的事情。这将使您能够使用Oracle中的内置数字功能来汇总分数,而不是解析字符串。然后,使用类型NUMBER(1,0)将每列的大小限制为(0-9)。例如:

alter table table_name add (
    column possible number(1,0),
    column actual number(1,0)
);


如果分数列中已经有数据,则将值从那里复制到新列中。最后,删除该列。

alter table table_name drop score;


另外,我将对“ Oracle小于约束”进行搜索,因为您可能不希望实际分数超过可能,并且可能会执行类似的约束以使可能分数大于零。

07-24 09:21