ORA-00001: 고유 제약 조건 위반 오류 해결법
Oracle SQL을 사용할 때 INSERT 또는 UPDATE 시 아래와 같은 오류 메시지를 본 적 있으신가요?
ORA-00001: unique constraint (SCHEMA.CONSTRAINT_NAME) violated
이 오류는 테이블에 설정된 UNIQUE 제약 조건을 위반했을 때 발생합니다. 즉, 같은 값을 중복해서 넣으려는 시도가 있을 때 발생하는 오류입니다.
1. ORA-00001 오류란?
ORA-00001
은 Oracle에서 UNIQUE 또는 PRIMARY KEY 제약 조건이 있는 컬럼에 대해
중복된 값을 입력하려고 할 때 발생하는 오류입니다.
이 오류는 INSERT, MERGE 또는 UPDATE 구문에서 자주 발생합니다.
2. 주요 발생 원인
- 🔁 기존에 동일한 값이 이미 존재함
- 🆔 기본키(PK) 컬럼에 중복된 값 삽입 시도
- 🔐 UNIQUE 제약 조건이 적용된 컬럼에 중복값 입력
- 🔢 시퀀스 없이 수동으로 ID 생성 시 충돌
3. 해결 방법
✔️ 1. 어떤 제약 조건에 위배되었는지 확인
오류 메시지에 나오는 제약 조건 이름을 기반으로 ALL_CONSTRAINTS
뷰에서 상세 정보를 확인할 수 있습니다.
SELECT constraint_name, table_name, constraint_type
FROM user_constraints
WHERE constraint_name = 'UQ_EMPLOYEE_EMAIL';
✔️ 2. 중복 데이터 존재 여부 확인
SELECT email, COUNT(*)
FROM employees
GROUP BY email
HAVING COUNT(*) > 1;
✔️ 3. 시퀀스를 사용하여 ID 충돌 방지
CREATE SEQUENCE emp_seq START WITH 1 INCREMENT BY 1;
INSERT INTO employees (id, name)
VALUES (emp_seq.NEXTVAL, '홍길동');
✔️ 4. MERGE 또는 UPSERT 시 주의
MERGE 구문 사용 시 중복 여부를 먼저 체크해야 합니다.
MERGE INTO employees e
USING (SELECT 101 AS id, '철수' AS name FROM dual) src
ON (e.id = src.id)
WHEN MATCHED THEN
UPDATE SET name = src.name
WHEN NOT MATCHED THEN
INSERT (id, name) VALUES (src.id, src.name);
4. 예제 및 실습
예제 1: 기본키 중복
CREATE TABLE students (
student_id NUMBER PRIMARY KEY,
name VARCHAR2(50)
);
INSERT INTO students VALUES (1, '김철수');
INSERT INTO students VALUES (1, '이영희'); -- ORA-00001 발생
예제 2: UNIQUE 제약 조건 위반
CREATE TABLE members (
id NUMBER PRIMARY KEY,
email VARCHAR2(100) UNIQUE
);
INSERT INTO members VALUES (1, 'test@example.com');
INSERT INTO members VALUES (2, 'test@example.com'); -- ORA-00001 발생
5. 예방 팁
- ✅ PRIMARY KEY나 UNIQUE 컬럼에 데이터 입력 전
중복 여부 체크
- ✅ 자동 증가용 컬럼은
SEQUENCE
사용으로 충돌 방지 - ✅ MERGE 또는 UPSERT 시 중복 조건 먼저 검사
- ✅ 테이블 설계 시 제약 조건 이름 명확히 지정해 오류 파악 용이
🔚 마무리
ORA-00001 오류는 데이터 무결성을 보장하기 위한 Oracle의 제약 조건이 제대로 작동하고 있다는 신호입니다. 오류 메시지를 보고 어떤 컬럼이 중복되었는지 파악하고, 그에 맞는 조치를 취해 보세요.
도움이 되셨다면 댓글과 좋아요, 구독 부탁드립니다. Oracle 오류 시리즈는 계속됩니다 😊
'ORACLE' 카테고리의 다른 글
ORA-01555 오류 해결 방법 | Snapshot too old 예외 완전 정복 (0) | 2025.04.13 |
---|---|
ORA-01403 오류 해결 방법 | Oracle 데이터 없음 예외 완전 분석 (0) | 2025.04.12 |
ORA-01017 오류 해결 방법 | Oracle 로그인 실패 원인과 대처법 (0) | 2025.04.10 |
ORA-00904 오류 해결 방법 | Oracle SQL 컬럼 오류 완전 정복 (0) | 2025.04.09 |
ORA-01722 오류 해결 방법 | Oracle 숫자 변환 오류 완벽 가이드 (0) | 2025.04.08 |