2011-11-02 2 views
2

안녕하세요. 내 테이블에 날짜를 삽입하고 있습니다. 몇 가지 이유로 제약 조건을 해제해야했습니다. 제약 조건은 인덱스와 관련이 있습니다. 이 코드 줄을 사용했습니다.novalidate 옵션을 사용하여 유효성을 확인할 수 없습니다.

ALTER TABLE my_table DISABLE CONSTRAINT "my_constraint" drop index 

그리고 my_constraint는 비활성 상태입니다. 당신이 당신의 테이블에 행을 삽입 할 때 제약 조건을 위반

ORA-02299: cannot validate (USER.my_constraint) - - duplicate keys found

답변

6

고유 인덱스가 아닌 고유 값을 가질 수 없습니다. 그러나 비 고유 인덱스가 적용되는 고유 제한 조건이있는 고유하지 않은 값을 가질 수 있습니다. 고유하지 않은 색인을 처음 만들었더라도 using index 섹션에 세부 정보를 제공하지 않는 한 drop indexenable 구문은 고유 색인을 다시 작성하려고 시도합니다. 예를 들어

:

SQL> create table my_table(my_column number, 
    2  constraint my_constraint unique (my_column)); 

Table created. 

SQL> alter table my_table disable constraint my_constraint drop index; 

Table altered. 

SQL> insert into my_table select 1 from dual union all select 1 from dual; 

2 rows created. 

SQL> alter table my_table enable novalidate constraint my_constraint; 
alter table my_table enable novalidate constraint my_constraint 
* 
ERROR at line 1: 
ORA-02299: cannot validate (USER.MY_CONSTRAINT) - duplicate keys found 


SQL> alter table my_table enable novalidate constraint my_constraint 
    2  using index (create index my_index on my_table(my_column)); 

Table altered. 

SQL> --The constraint is enforced, even though other rows violate it. 
SQL> insert into my_table values(1); 
insert into my_table values(1) 
* 
ERROR at line 1: 
ORA-00001: unique constraint (USER.MY_CONSTRAINT) violated 
+0

고유 한 제약 조건 인 비 고유 인덱스, 좋은 해결책! – Ollie

0

, 외모 : 나는 오류를 받아 봐

ALTER TABLE my_table ENABLE NOVALIDATE CONSTRAINT "my_constraint";\ 

: 아니, 난 '이 제약을 가능하게 좋아하지만이 줄을 호출 한 후 거라고 "중복 키를 찾았습니다"라는 오류 메시지를 기반으로하는 고유 한 제약 조건 인 것처럼

제약 조건의 기반이되는 열을 확인한 후 다음과 같은 빠른 쿼리를 수행하여 중복 된 열이 있는지 확인하십시오 columnb는 열

SELECT의 COLUMNA) 고유 제약 조건, MYTABLE FROM COLUMNB COUNT () 는 COUNT (을)> HAVING 1

당신은 테이블의 모든 행까지 고유 제한 조건을 사용하도록 설정할 수 없습니다 제약의 규칙을 충족시킨다.

+0

내가 중복을 가지고 싶습니다 '하면? – matyyyy

+1

그런 다음 고유하지 않으며 색인이 고유하지 않은 색인이어야합니다. –

관련 문제