Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oracle检查约束列为零或唯一_Oracle_Unique_Check Constraints - Fatal编程技术网

Oracle检查约束列为零或唯一

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 >

我必须向Oracle表添加一个约束。数字列应为零或唯一(且>0)。 我尝试在约束定义或函数中插入查询,但它们是不允许的。 有什么想法吗?
您好,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:你是对的;我假设表中已经存在这样的约束,但最好澄清一下。要编辑吗