코딩에 손 담그기
ORA-02292 코드. 그리고 fk 제약조건 추가하기 본문
주문 기본 정보과 주문 목록 내용을 삭제하려는데 에러가 뜸
SQL> delete from order_info;
ERROR at line 1:
ORA-02292: integrity constraint (HR.ORDER_LINE_NO_FK) violated - child record
found
음...? 뭐가 잘못되었나...? 수업은 진행중이고 빨리 삭제하고 커밋해야하는데 동공지진....
얼른 구글링하는데 다양한 방법은 나오고, 하지만 테이블명들이 다들 다르고 조급해져서 눈에는 안들어오고ㅠ
오라클 켜서 테이블들 제약조건을 확인해보는데
--주문 기본테이블
CREATE TABLE order_info(
order_no NUMBER,
order_id VARCHAR2(10) NOT NULL CONSTRAINT order_id_fk REFERENCES customer(id),
order_dt DATE NOT NULL,
CONSTRAINT order_info_no_pk PRIMARY KEY(order_no)
);
order_info 테이블에 order_id가 fk참조를 못해서 생기는 문제였다.
난 분명 테이블 생성할때 제약조건을 걸었는데.............!!!라고 생각했지만,
복습할때 customer 테이블을 삭제하고 다시 만드는 과정에서 customer 테이블의 id를 pk설정을 하지못했었고, 그로인해 이전에 문제가 한 번 있었기 때문에...이게 문득 떠올랐다.
결국 이 문제로 order_info 테이블 생성할때 order_id값이 fk 제약조건이 안걸렸던것.
급하게 제약조건을 추가하려는데, 계속 에러가 발생한다...
추가한 조건은
ALTER TABLE order_info
ADD CONSTRAINT order_id_fk FOREIGN KEY(order_id) REFERENCES customer(id)
오류 보고 -
ORA-02298: cannot validate (HR.ORDER_ID_FK) - parent keys not found
02298. 00000 - "cannot validate (%s.%s) - parent keys not found"
*Cause: an alter table validating constraint failed because the table has
child records.
*Action: Obvious
자식테이블에 문제가 있는듯하여, 다른 방법을 더 찾아야하지만..!
우선 나는 order_info 와 order_line의 데이터내용을 삭제하는게 목적이였기때문에 가장 자식인 테이블의 데이터부터 지웠다.
order_line테이블 내용 지우고, order_info테이블 내용 지우고나니
제약조건 추가가 가능했다...ㅠㅠㅠㅠ
타이밍이 맞아서 다행이었지만, 만약 데이터를 그대로 두고 제약조건을 추가해야했다면?
그때는 다른 방법을 찾아야 했을 것이다.
다음엔 그 방법이 무엇인지 알아보기!!
'코딩 > JAVA' 카테고리의 다른 글
캘린더 (calIdx 값 찾기 대소동) (0) | 2022.02.18 |
---|---|
톰캣 war파일 배포 안될때 (에러는 없지만 배포가 안된다?) (0) | 2022.01.25 |
이클립스와 톰캣 10버전 연동 에러. 404코드 (1) | 2021.12.01 |
Comments