SW/Database / / 2024. 6. 27. 09:20

ORA-02291: Integrity constraint violated - parent key not found / 원인과 해결방법

반응형

ORA-02291 에러는 참조 무결성 제약 조건이 위반될 때 발생합니다.
이는 자식 테이블에 삽입하려는 외래 키 값이 부모 테이블에 존재하지 않을 경우에 발생합니다.

 

ORA-02291

 

에러 원인

 

부모 테이블에 존재하지 않는 값을 자식 테이블의 외래 키로 삽입하려고 할 때 발생합니다.
이는 참조 무결성 제약 조건이 부모 테이블의 특정 값을 참조해야 하는 자식 테이블의 외래 키와 관련이 있습니다.

 

해결방법

 

1. 부모 테이블에 필요한 레코드를 삽입합니다.
자식 테이블에 값을 삽입하기 전에 부모 테이블에 해당 값이 존재하는지 확인하고, 존재하지 않는다면 부모 테이블에 해당 값을 먼저 삽입해야 합니다.

2. 자식 테이블의 외래 키 값을 올바르게 설정합니다.
부모 테이블에 존재하는 값으로 자식 테이블의 외래 키 값을 설정해야 합니다.

3. 잘못된 데이터를 수정합니다.
이미 입력된 잘못된 데이터를 찾아 수정하거나 삭제해야 합니다.

 

아래는 이 오류를 해결하기 위한 SQL 예제입니다:

-- 부모 테이블 생성
CREATE TABLE parent_table (
    id NUMBER PRIMARY KEY,
    name VARCHAR2(50)
);

-- 자식 테이블 생성
CREATE TABLE child_table (
    id NUMBER PRIMARY KEY,
    parent_id NUMBER,
    CONSTRAINT fk_parent
        FOREIGN KEY (parent_id)
        REFERENCES parent_table(id)
);

-- 부모 테이블에 값 삽입
INSERT INTO parent_table (id, name) VALUES (1, 'Parent 1');

-- 자식 테이블에 올바른 외래 키 값 삽입
INSERT INTO child_table (id, parent_id) VALUES (1, 1);

-- 자식 테이블에 잘못된 외래 키 값 삽입 시도 (에러 발생)
INSERT INTO child_table (id, parent_id) VALUES (2, 99);

 

위 예제에서는 부모 테이블인 parent_table에 존재하지 않는 99 값을 자식 테이블인 child_table에 삽입하려고 할 때 ORA-02291 에러가 발생합니다. 이 오류를 해결하려면 부모 테이블에 99 값을 먼저 삽입해야 합니다.

 

 


간단 정리

 

1. 부모 테이블에 필요한 레코드가 존재하는지 확인합니다.

2. 자식 테이블의 외래 키 값을 부모 테이블의 유효한 값으로 설정합니다.

3. 잘못된 데이터를 찾아 수정하거나 삭제합니다.

 

반응형
  • 네이버 블로그 공유
  • 네이버 밴드 공유
  • 페이스북 공유
  • 카카오스토리 공유