ORA-02437: cannot validate - primary key violated (ORA-02437: 을 검증할 수 없습니다 - 잘못된 기본 키입니다)

ORA-02437: cannot validate - primary key violated 오류는 기본키를 추가하려는 시도를 할 때, 검증이 불가한 경우에 발생합니다. 그 이유는 기본키의 속성인 유일성이 보장되지 않은 속성 조합에 기본키를 설정하려는 시도를 하였기 때문입니다.

ORA-02437: cannot validate - primary key violated

해당 오류를 해결하려면 추가하려는 기본키에 위배되는 컬럼 조합을 가지고 있는 데이터를 정리해 주세요. 다음의 예제에서 테이블(TABLE_NAME)은 2개의 컬럼을 가지며 각각 COLUMN_NAME과 COLUMN_NAME_2입니다. 이때, 2개의 컬럼을 기본키로 설정을 하려는 경우, 해당 조합에 중복이 존재한다면 검증에 실패하게 됩니다.

ALTER TABLE USER_NAME.TABLE_NAME ADD (
       CONSTRAINT CN_TABLE_NAME
       PRIMARY KEY
       (COLUMN_NAME, COLUMN_NAME_2));
  CONSTRAINT CN_TABLE_NAME

ERROR at line 2:
ORA-02437: cannot validate (USER_NAME.CN_TABLE_NAME) - primary key violated

예제 데이터는 현재와 같이 중복된 로우가 있습니다. (1, 1)이 중복된 데이터입니다.

--테이블 현재 데이터 (컬럼1과 컬럼2에 각각 1인 데이터가 중복)
SELECT * FROM TABLE_NAME;

COLUMN_NAME COLUMN_NAME_2
-------------------------
1           1
1           1
1           2

다음의 쿼리를 통해 중복되는 데이터를 조회해 볼 수 있습니다.

 SELECT COLUMN_NAME, COLUMN_NAME_2, COUNT (*)
         FROM TABLE_NAME
     GROUP BY COLUMN_NAME, COLUMN_NAME_2
       HAVING COUNT (*) > 1;

COLUMN_NAME COLUMN_NAME_2 COUNT(*)
--------------------------------
1           1             2

댓글