[Oracle-오류] ORA-02291: 무결성 제약 조건(FOREIGN KEY) 위반 |
■ 원인
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 오류를 해결하기 위해 다음과 같은 조치를 취할 수 있습니다:
▶ 외래 키 값 일치 확인: 삽입 또는 업데이트하려는 외래 키 값이 부모 테이블의 기본 키 값과 일치하는지 확인해야 합니다. 일치하지 않는 경우, 올바른 외래 키 값을 제공해야 합니다.
▶ 부모 테이블 데이터 유지: 외래 키 무결성을 유지하기 위해 부모 테이블의 데이터를 삭제하기 전에, 관련된 자식 테이블의 외래 키 값에 대한 처리를 고려해야 합니다. 적절한 조치를 취하여 오류를 방지할 수 있습니다.
'Data & Programming > Oracle' 카테고리의 다른 글
[오라클-오류] ORA-12154 : TNS 지정된 접속 식별자를 분석할 수 없음 (0) | 2023.07.22 |
---|---|
[오라클-오류] ORA-01756: 사용자 정의 데이터 유형이 잘못되었습니다. (0) | 2023.07.15 |
[오라클-오류] ORA-01400: 삽입할 값이 없습니다. (0) | 2023.07.15 |
[오라클-오류] ORA-00936: 누락된 표현식입니다. (0) | 2023.07.15 |
[Oracle-오류] ORA-01000: 최대 개별 SELECT 문이 초과되었습니다. (0) | 2023.07.15 |