2017-03-08 8 views
0

오라클 테이블에 제약 조건을 추가해야합니다. 숫자 열은 0이거나 고유해야합니다 (및> 0). 제약 조건 정의 또는 함수 내에 쿼리를 삽입하려고 시도했지만 허용되지 않습니다. 아이디어가 있으십니까? 인사말, Marcelo.오라클은 제약 조건 컬럼을 0 또는 유일한 것으로 확인합니다.

+0

당신은 우리에게 체크 제약을 어떻게 보여줄 수 있습니까? 또한 삽입물을 보여 주시겠습니까? 테이블의 DDL은 플러스가됩니다 – Moudiz

+0

왜 0입니까? 이 제약이 적용하려는 비즈니스 규칙은 무엇입니까? – APC

+0

중복 된 것으로 보입니다. http://stackoverflow.com/questions/42671008/how-do-i-add-a-not-null-column-and-a-check-constraint-in-one-line-in-oracle-11g 당신 것 같습니다. guyz는 함께 일합니다 – XING

답변

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. 

작동 : 나는 0으로 많은 행을 삽입 할 수 있습니다

SQL> insert into checkUniqueTab values (1); 
insert into checkUniqueTab values (1) 
* 
ERROR at line 1: 
ORA-00001: unique constraint (ALEK.I1) violated 

: 여기

SQL> insert into checkUniqueTab values (1); 

1 row created. 

SQL> insert into checkUniqueTab values (2); 

1 row created. 

내가 중복 양의 값을 삽입하려고 값 :

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 

이 이미 음수 값을 삽입 방지하기 위해 테이블에 제약 조건이 있다고 가정합니다.

+0

이것은 아주 깔끔한 해결책이지만 중복 된 음수 값을 허용합니다. 그래서 우리는 여전히'(n> = 0)'을 시행하기위한 체크 제약이 필요하다고 생각합니다. – APC

+0

그게 내가 원하는거야! 고맙습니다! –

+0

@ APC : 당신 말이 맞습니다. 나는 그런 제약이 이미 테이블에 있다고 가정하고 있었지만 명확히하는 것이 더 낫습니다. 편집하려고합니다. – Aleksej