ORA-02291: 무결성 제약조건이 위배되었습니다- 부모 키가 없습니다 (ORA-02291: integrity constraint violated - parent key not found)

ORA-02291: 무결성 제약조건이 위배되었습니다- 부모 키가 없습니다

ORA-02291: integrity constraint violated - parent key not found

오라클과 같은 데이터베이스는 '무결성'을 제약조건으로 하여금 보장할 수 있습니다. 이때 제약조건을 위배하는 경우, 위배하는 종류에 따라 오류를 발생시킨답니다.

이번 주제 'ORA-02291: 무결성 제약조건이 위배되었습니다- 부모 키가 없습니다' 오류는 부모 테이블에 키가 없는 컬럼을 인서트 하려고 할 때 발생합니다.

부모키와 관련된 외래키 자료는 다음을 참고해 주세요.
외래키가 무엇인가요? 누르면 이동합니다~

간단한 예제를 보며 오류의 발생과 해결 방법에 대해 알아보도록 하겠습니다.

Insert into USER_NAME.EMP
   (EMPNO, ENAME, JOB, HIREDATE, SAL, DEPTNO)
 Values
   (9999, 'BEOMSANG', '?', TO_DATE('11/17/1996 00:00:00', 'MM/DD/YYYY HH24:MI:SS'),
    5000, 0);

ERROR at line 1:
ORA-02291: integrity constraint (USER_NAME.FK_DEPTNO) violated - parent key not found

ORA-02291: integrity constraint violated - parent key not found

이 오류는 앞에서 말씀드렸듯이, FOREIGN KEY 제약 조건이 정의된 컬럼에 값을 인서트 하려고 할 때, 해당 값이 FOREIGN KEY 제약 조건에 의해 참조된 부모 테이블에 존재하지 않을 때 발생한답니다.

참고로 예제에서 말하는 무결성 제약조건 외래 키는 DEPT 테이블에 DEPTNO 컬럼이며, 인서트 하려는 '0' 값이 없어서 발생합니다.

유저 제약조건은 다음과 같은 쿼리로 확인할 수 있습니다.

SELECT *
  FROM ALL_CONSTRAINTS
 WHERE OWNER = 'USER_NAME' AND CONSTRAINT_NAME = 'FK_DEPTNO';

OWNER
CONSTRAINT_NAME                                       CO TABLE_NAME                                                   SEARCH_CONDITION                                                                 R_OWNER                                 R_CONSTRAINT_NAME                                             DELETE_RULE        STATUS           DEFERRABLE
     DEFERRED            VALIDATED                  GENERATED                    BAD    RELY     LAST_CHA INDEX_OWNER
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ ------------------------------------------------------------ -- ------------------------------------------------------------ -------------------------------------------------------------------------------- ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ ------------------------------------------------------------ ------------------ ---------------- ---------------------------- ------------------ -------------------------- ---------------------------- ------ -------- -------- ------------------------------------------------------------
INDEX_NAME                                                   INVALID        VIEW_RELATED
------------------------------------------------------------ -------------- ----------------------------
USER_NAME
FK_DEPTNO                                                     R  EMP
      USER_NAME                                                                                                        PK_DEPT                                               NO ACTION          ENABLED          NOT DEFERRABLE               IMMEDIATE          VALIDATED                  USER NAME                                    

해당 오류를 수정하는 방법은 2가지가 있습니다. 우선 어떠한 방법으로 처리할지 확인하여야 합니다.

  • 부모 키가 없어도 되는 경우
  • 부모 키가 있어야 하는 경우

부모 키 불필요?

부모 키에 의한 무결성 제약조건을 삭제합니다.

ALTER TABLE TABLE_NAME DROP CONSTRAINT CONSTRAINT_NAME;

부모 키 필요?

부모 키가 필요한 경우는 다시 2가지 경우를 생각해 볼 수 있습니다.

하나는 부모 키 입력을 누락한 경우, 다른 하나는 현재 입력하는 자식 키에 대한 오타입니다. 

오타 여부를 한 번 더 확인해 주시고요, 정확히 입력하였다면 부모 키가 없는 경우이므로, 무결성 제약조건이 위배되지 않도록 부모 키에 해당 컬럼 값을 먼저 추가해 주세요.

이러한 방법을 통해 ORA-02291: integrity constraint violated - parent key not found 오류를 해결할 수 있답니다!

댓글 쓰기
가져가실 때, 출처 표시 부탁드려요! 감사합니다. 💗