참고글 및 문제해결/문제해결
참조키 걸려고 할때 부모컬럼의 자료와 자식컬럼의 자료가 맞지 않아서 이어지지 않는 경우 (; exception테이블, spool, vi로 파일비교 사용예제포함)
에몽이ㅋ
2012. 2. 21. 10:04
account 에 여러 자료 입력 후
account에서 다시 bcode(code)를 참조해서 참조키 연결 시 문제
(이어지지 않습니다.)
--> EXCEPTION table을 이용해봅시다.
** 아마도 foreign key 자체가 성립이 되지 않다보니까
exception에도 아예 들어가지 않았나봅니다.
수정 --> 위 실습 때는 exceptions into exceptions 를 적어주지 않아서,
exception안에 오류난 값들이 들어가지 않았고,
실제로는
쿼리 마지막에 exceptions into exceptions 라고 추가해주면 exceptions테이블에
오류난 부분이 들어가게 됩니다.
차선책(자료를 비교)
SQL> insert into account(code) values('WOW'); << bcode(code)에는 없는 자료입니다. SQL> commit; SQL> alter table account 2 add constraint account_code_fk 3 foreign key(code) 4 references bcode(code); add constraint account_code_fk * ERROR at line 2: ORA-02298: cannot validate (KOO.ACCOUNT_CODE_FK) - parent keys not found
(이어지지 않습니다.)
--> EXCEPTION table을 이용해봅시다.
EXCEPTION table 생성 후 확인 SQL> @?/rdbms/admin/utlexcpt.sql Table created. SQL> alter table account 2 add constraint account_code_fk 3 foreign key(code) 4 references bcode(code); add constraint account_code_fk * ERROR at line 2: ORA-02298: cannot validate (KOO.ACCOUNT_CODE_FK) - parent keys not found SQL> select rowid, code from account 2 where rowid in(select row_id from exceptions); no rows selected SQL> select * from exceptions; no rows selected
** 아마도 foreign key 자체가 성립이 되지 않다보니까
exception에도 아예 들어가지 않았나봅니다.
수정 --> 위 실습 때는 exceptions into exceptions 를 적어주지 않아서,
exception안에 오류난 값들이 들어가지 않았고,
실제로는
쿼리 마지막에 exceptions into exceptions 라고 추가해주면 exceptions테이블에
오류난 부분이 들어가게 됩니다.
차선책(자료를 비교)
SQL> set heading off SQL> spool bcode_code.txt SQL> select code from bcode order by 1; DG HK KB WOO SQL> spool off SQL> spool account_code.txt SQL> select distinct code from account order by 1; DG KB WOW SQL> spool off
하면 해당 결과들이 각 파일에 저장됩니다.
이후 각각의 파일들을 약간 편집 후
vi -d account_code.txt bcode_code.txt 하여 두파일을 비교해서 table을 수정하시기 바랍니다.
(vi 안에서 창 변환 Ctrl+W)
(vi 안에서 창 변환 Ctrl+W)