Oracle检查约束列为零或唯一

时间:2017-03-08 12:54:10

标签: oracle unique check-constraints

我必须向Oracle表添加约束。数字列应为零或唯一(和> 0)。 我尝试在约束定义或函数内插入查询但不允许它们。 任何的想法? 问候,马塞洛。

1 个答案:

答案 0 :(得分:1)

如果我理解你的需要,你可以使用基于函数的索引来检查只有正值的唯一性。

例如:

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

这假设您已经在表上设置了约束以防止插入负值。