[정보] 잡동사니

[ORACLE] ORA-00001: 무결성 제약 조건 (PRIMARY KEY) 위배 오류 해결

  • -
반응형

ORA-00001: 무결성 제약 조건 (PRIMARY KEY) 위배 오류 해결

1. ORA-00001 오류란?

ORA-00001: unique constraint (제약조건명) violated 오류는 PRIMARY KEY 또는 UNIQUE 제약 조건을 위배했을 때 발생하는 오류입니다. 즉, 테이블에서 중복된 값이 입력될 때 발생합니다.

 

 

 

 

 

 

 

2. ORA-00001 오류 발생 원인

📌 (1) PRIMARY KEY 중복

PRIMARY KEY 컬럼은 **고유한 값(Unique)이어야 하며, NULL 값을 가질 수 없음**. 동일한 PRIMARY KEY 값을 가진 행을 **INSERT** 하거나, 기존 행의 PRIMARY KEY 값과 충돌할 때 오류가 발생합니다.

 

 

 

 

 

📌 (2) UNIQUE 제약 조건 위반

UNIQUE 제약 조건이 걸린 컬럼에 **중복 값이 입력될 경우 오류 발생**.

 

 

 

 

 

📌 (3) 시퀀스(SEQUENCE) 값 충돌

시퀀스를 사용하여 값을 자동 증가시키는데, 기존 데이터와 중복될 경우 오류 발생.

 

 

 

 

 

 

 

3. ORA-00001 오류 해결 방법

✅ 방법 1: 중복 데이터 확인 및 삭제

테이블에서 **중복된 데이터가 있는지 확인**하고, 필요에 따라 삭제합니다.


SELECT * FROM JOBS
WHERE JOB_ID = '중복된_값';

만약 중복된 값이 존재하면 해당 데이터를 삭제하거나 업데이트할 수 있습니다.


DELETE FROM JOBS
WHERE JOB_ID = '중복된_값';

 

 

 

 

 

 

 

 

 

✅ 방법 2: PRIMARY KEY 자동 증가 시퀀스 확인

시퀀스가 올바르게 증가하는지 확인하고, 필요하면 값을 조정합니다.


SELECT SEQUENCE_NAME, LAST_NUMBER 
FROM USER_SEQUENCES
WHERE SEQUENCE_NAME = 'JOB_SEQ';

시퀀스 값이 현재 테이블 데이터보다 낮으면 아래와 같이 증가시킵니다.


ALTER SEQUENCE JOB_SEQ INCREMENT BY 100;
SELECT JOB_SEQ.NEXTVAL FROM DUAL;
ALTER SEQUENCE JOB_SEQ INCREMENT BY 1;

 

 

 

 

 

 

 

 

 

 

✅ 방법 3: INSERT 전에 중복 여부 확인

INSERT 하기 전에 같은 값이 이미 존재하는지 확인 후 추가합니다.


MERGE INTO JOBS j
USING (SELECT 'JOB123' AS JOB_ID, '개발자' AS JOB_TITLE FROM DUAL) t
ON (j.JOB_ID = t.JOB_ID)
WHEN MATCHED THEN
    UPDATE SET j.JOB_TITLE = t.JOB_TITLE
WHEN NOT MATCHED THEN
    INSERT (JOB_ID, JOB_TITLE) VALUES (t.JOB_ID, t.JOB_TITLE);

반응형
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.