본문 바로가기
Data & Programming/Oracle

[오라클-오류] ORA-02291: 무결성 제약 조건(FOREIGN KEY) 위반

by 눈부셔™ 2023. 7. 15.
728x90

 

[Oracle-오류] ORA-02291: 무결성 제약 조건(FOREIGN KEY) 위반

 

오라클오류 ORA-02291

■ 원인
ORA-02291 오류가 발생하는 주요 원인은 다음과 같습니다:
  ▶ 외래 키 값 불일치: 자식 테이블에 삽입하거나 업데이트하려는 외래 키 값이 부모 테이블의 기본 키 값과 일치하지 않을 때 오류가 발생합니다.
  ▶ 부모 테이블에서 데이터 삭제: 부모 테이블에서 기본 키 값을 삭제하면, 해당 값과 관련된 자식 테이블의 외래 키 값이 무효화되므로 ORA-02291 오류가 발생할 수 있습니다.

 

 

■ 예제
아래는 ORA-02291 오류가 발생할 수 있는 몇 가지 예제입니다:

  ▶ 예제 1: 외래 키 값 불일치

CREATE TABLE employees (
  employee_id NUMBER PRIMARY KEY,
  employee_name VARCHAR2(50)
);

CREATE TABLE departments (
  department_id NUMBER PRIMARY KEY,
  department_name VARCHAR2(50)
);

ALTER TABLE departments ADD (
  manager_id NUMBER,
  CONSTRAINT fk_manager FOREIGN KEY (manager_id) REFERENCES employees(employee_id)
);

INSERT INTO departments (department_id, department_name, manager_id)
VALUES (1, 'IT Department', 1001);

위의 예제에서는 "employees" 테이블과 "departments" 테이블을 생성하였습니다. "departments" 테이블에는 "manager_id" 열이 있으며, 이 열은 "employees" 테이블의 "employee_id" 열을 참조하는 외래 키입니다.

INSERT 문에서는 "departments" 테이블에 새로운 부서를 삽입하고, "manager_id"에 1001이라는 값을 제공하였습니다. 그러나 "employees" 테이블에는 "employee_id"가 1001인 사원이 존재하지 않아 외래 키 무결성 제약 조건을 위반하게 되어 ORA-02291 오류가 발생합니다.

  ▶ 예제 2: 부모 테이블에서 데이터 삭제

DELETE FROM employees WHERE employee_id = 1001;

위의 예제에서는 "employees" 테이블에서 "employee_id"가 1001인 사원의 데이터를 삭제하였습니다. 이로 인해 "departments" 테이블의 "manager_id" 외래 키 값이 무효화되어 ORA-02291 오류가 발생할 수 있습니다.

 


■ 해결 방법
ORA-02291 오류를 해결하기 위해 다음과 같은 조치를 취할 수 있습니다:

  ▶ 외래 키 값 일치 확인: 삽입 또는 업데이트하려는 외래 키 값이 부모 테이블의 기본 키 값과 일치하는지 확인해야 합니다. 일치하지 않는 경우, 올바른 외래 키 값을 제공해야 합니다.
  ▶ 부모 테이블 데이터 유지: 외래 키 무결성을 유지하기 위해 부모 테이블의 데이터를 삭제하기 전에, 관련된 자식 테이블의 외래 키 값에 대한 처리를 고려해야 합니다. 적절한 조치를 취하여 오류를 방지할 수 있습니다.

728x90