我必须向Oracle表添加约束。数字列应为零或唯一(和> 0)。 我尝试在约束定义或函数内插入查询但不允许它们。 任何的想法? 问候,马塞洛。
答案 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
这假设您已经在表上设置了约束以防止插入负值。