Oracle检查约束列为零或唯一
我必须向Oracle表添加一个约束。数字列应为零或唯一(且>0)。 我尝试在约束定义或函数中插入查询,但它们是不允许的。 有什么想法吗?Oracle检查约束列为零或唯一,oracle,unique,check-constraints,Oracle,Unique,Check Constraints,我必须向Oracle表添加一个约束。数字列应为零或唯一(且>0)。 我尝试在约束定义或函数中插入查询,但它们是不允许的。 有什么想法吗? 您好,Marcelo。如果我很了解您的需要,您可以使用基于函数的索引来检查只有正值的唯一性 例如: SQL> create table checkUniqueTab(n number); Table created. SQL> create unique index i1 on checkUniqueTab( case when n >
您好,Marcelo。如果我很了解您的需要,您可以使用基于函数的索引来检查只有正值的唯一性 例如:
SQL> create table checkUniqueTab(n number);
Table created.
SQL> create unique index i1 on checkUniqueTab( case when n > 0 then n end);
Index created.
插入不同的值起作用:
SQL> insert into checkUniqueTab values (1);
1 row created.
SQL> insert into checkUniqueTab values (2);
1 row created.
在这里,我尝试插入一个重复的正值:
SQL> insert into checkUniqueTab values (1);
insert into checkUniqueTab values (1)
*
ERROR at line 1:
ORA-00001: unique constraint (ALEK.I1) violated
我可以插入许多值为0的行:
SQL> insert into checkUniqueTab values (0);
1 row created.
SQL> insert into checkUniqueTab values (0);
1 row created.
结果是:
SQL> select * from checkUniqueTab;
N
----------
1
2
0
0
这假设您的表上已经有一个约束,以防止插入负值。您能告诉我们检查约束是如何产生的吗?还要给我们看插页吗?桌子的DDL会是一个加号,为什么是零?这个约束试图强制执行什么业务规则?似乎是重复的。看来你在工作together@XING-更可能的是,他们在同一个班级,有相同的家庭作业或带回家的考试。这是一个很好的解决方案,但也允许重复负值。所以我认为我们仍然需要一个检查约束来强制执行
(n>=0)
@APC:你是对的;我假设表中已经存在这样的约束,但最好澄清一下。要编辑吗