데이터베이스					분류
				
						제약조건(constraint)를 위반하는 행(row) 알아내기
작성자 정보
- 웹관리자 작성
 - 작성일
 
컨텐츠 정보
- 8,165 조회
 - 0 추천
 - 목록
 
본문
제약조건(constraint)를 위반하는 행(row) 알아내기
아래의 예에서는 제약조건인 primary key를 disable하고 데이터들을 삽입한 후,다시 primary key제약조건을 enable했을 경우에 대해 알아본다.enable이 실패했을 경우 어떠한 이유로 실패했는지 파악하고 이를 해결하는 방법을 알아본다.
SQL> create table test 2 ( 3 name varchar2(10), 4 age number(2) 5 );
테이블이 생성되었습니다.
SQL> alter table test 2 add constraint test_name_pk primary key(name);
테이블이 변경되었습니다.
SQL> insert into test values('강명규', 26);1 개의 행이 만들어졌습니다.
SQL> insert into test values('홍길동', 30);1 개의 행이 만들어졌습니다.
SQL> alter table test 2 disable constraint test_name_pk;
테이블이 변경되었습니다.
SQL> @?/rdbms/admin/utlexcpt테이블이 생성되었습니다.
SQL> select * from tab;TNAME TABTYPE CLUSTERID ------------------------------ ------- ---------- CHAINED_ROWS TABLE EXCEPTIONS TABLE PLAN_TABLE TABLE S_CUSTOMER TABLE S_DEPT TABLE S_EMP TABLE S_IMAGE TABLE S_INVENTORY TABLE S_ITEM TABLE S_LONGTEXT TABLE S_ORD TABLE S_PRODUCT TABLE S_REGION TABLE S_TITLE TABLE S_WAREHOUSE TABLE TEST TABLE
16 개의 행이 선택되었습니다.
SQL> desc exceptions
 이름                            Null?    유형
 ------------------------------- -------- ----
 ROW_ID                                   ROWID
 OWNER                                    VARCHAR2(30)
 TABLE_NAME                               VARCHAR2(30)
 CONSTRAINT                               VARCHAR2(30)
SQL> insert into test values('', 27);1 개의 행이 만들어졌습니다.
SQL> alter table test 2 enable constraint test_name_pk 3 exceptions into exceptions; alter table test * 1행에 오류: ORA-02437:
SQL> select * from exceptions;ROW_ID             OWNER                          TABLE_NAME                     CONSTRAINT                                             
------------------ ------------------------------ ------------------------------ ------------------------------                         
AAAAfGAAFAAAACeAAA KANG                           TEST                           TEST_NAME_PK                                           
AAAAfGAAFAAAACeAAC KANG                           TEST                           TEST_NAME_PK                                           SQL> select e.constraint, x.name 2 from exceptions e, test x 3 where e.row_id=x.rowid;
CONSTRAINT NAME ------------------------------ ---------- TEST_NAME_PK 강명규 TEST_NAME_PK 강명규
SQL> select * from test;NAME              AGE                                                                                                                   
---------- ----------                                                                                                                   
             26                                                                                                                   
홍길동             30                                                                                                                   
             27                                                                                                                   
SQL> delete from test where age=27;1 행이 삭제되었습니다.
SQL> alter table test 2 enable constraint test_name_pk;
테이블이 변경되었습니다.
"무단배포금지: 클라우드포털(www.linux.co.kr)의 모든 강좌는 저작권에 의해 보호되는 콘텐츠입니다. 무단으로 복제하여 배포하는 행위는 금지되어 있습니다."
		
					관련자료
- 
			이전
 - 
			다음
 
			댓글 0
					
			
				등록된 댓글이 없습니다.
			
					
								