테이블 컬럼의 Default 값에 대한 흔적은 Dictionary 계속 남게 된다.
금일 지인의 질문에 답하다 알게된 사실이 있다.
테이블에 한번 설정된 Default 값은 NULL이나 ''로 대체할 수 있을 뿐이지 지울 수는 없다라는 사실이다.
테스트 케이스를 확인해 보겠다.
테스트 환경을 먼저 만들어 보자.
kwan@testdb> create table test 2 (col1 varchar2(10) default 'AAAA', 3 col2 varchar2(10)); Table created. kwan@testdb> insert into test values ('11111','1111'); 1 row created. kwan@testdb> insert into test values ('22222','222222'); 1 row created. kwan@testdb> insert into test(col2) values ('333333'); 1 row created. kwan@testdb> commit; Commit complete. kwan@testdb> select * from test; COL1 COL2 ---------- ---------- 11111 1111 22222 222222 AAAA 333333 3 rows selected.
먼저 Dictionary 정보를 확인해 보자
kwan@testdb> SELECT OWNER,TABLE_NAME,COLUMN_NAME,DATA_DEFAULT FROM DBA_TAB_COLUMNS WHERE OWNER = 'KWAN'; OWNER TABLE_NAME COLUMN_NAME DATA_DEFAULT ---------- ----------- -------------- ------------ KWAN TEST COL1 'AAAA' KWAN TEST COL2 2 rows selected.
DBA_TAB_COLUMNS 뷰의 DATA_DEFAULT 컬럼에 default 값에 대한 정보가 등록된 내용을 확인할 수 있다.
이제 default 설정에 대해 변경을 하고 내용을 살펴 보자
kwan@testdb> ALTER TABLE TEST MODIFY (COL1 DEFAULT ''); Table altered. kwan@testdb> SELECT OWNER,TABLE_NAME,COLUMN_NAME,DATA_DEFAULT FROM DBA_TAB_COLUMNS WHERE OWNER = 'KWAN'; OWNER TABLE_NAME COLUMN_NAME DATA_DEFAULT ---------- ---------- ----------- ------------ KWAN TEST COL1 '' KWAN TEST COL2 2 rows selected. kwan@testdb> ALTER TABLE TEST MODIFY (COL1 DEFAULT NULL); Table altered. kwan@testdb> SELECT OWNER,TABLE_NAME,COLUMN_NAME,DATA_DEFAULT FROM DBA_TAB_COLUMNS WHERE OWNER = 'KWAN'; OWNER TABLE_NAME COLUMN_NAME DATA_DEFAULT ---------- ---------- ----------- ------------- KWAN TEST COL1 NULL KWAN TEST COL2 2 rows selected. kwan@testdb> ALTER TABLE TEST MODIFY (COL1 VARCHAR2(10)); Table altered. kwan@testdb> SELECT OWNER,TABLE_NAME,COLUMN_NAME,DATA_DEFAULT FROM DBA_TAB_COLUMNS WHERE OWNER = 'KWAN'; OWNER TABLE_NAME COLUMN_NAME DATA_DEFAULT ---------- ---------- ----------- ------------ KWAN TEST COL1 NULL KWAN TEST COL2 2 rows selected. kwan@testdb>
DATA_DEFAULT 컬럼에서 정보 자체가 없어질거라 예상했었지만 위와 같이 사라지지는 않는다.
관련 내용에 대한 문구가 오라클 매뉴얼 상에 있다....
역시 친절한 오라클 매뉴얼이군요.... (오라클 매뉴얼 상에 ALTER TABLE 내용에 아래 내용이 담겨 있습니다.)
Note: If a column has a default value, then you cannot modify the column so that it has no default value. However, you can modify the column to behave as if it has no default value by changing the default value toNULL . If a column has ever had a default value assigned to it, then the DATA_DEFAULT column of the USER_TAB_COLUMNS data dictionary view will always display either a default value or NULL . |
댓글 0
번호 | 제목 | 글쓴이 | 날짜 | 조회 수 |
---|---|---|---|---|
14 | Schema Password 복사 하기 | Talros | 2016.10.05 | 3487 |
13 | Block Cleanout(블럭 클린아웃) | 명품관 | 2016.09.23 | 1797 |
12 | Fixed Table에 대한 권한은 직접적으로 부여되지 않는다. | 명품관 | 2016.08.26 | 2945 |
11 | Oracle Archive log 사용량 확인(GV$ARCHIVED_LOG) [1] | 에밀리오 | 2016.08.04 | 11894 |
10 | Oracle Resource Limit를 이용한 간단한 Parameter Check (GV$RESOURCE_LIMIT) | 에밀리오 | 2016.07.15 | 2468 |
9 | Oracle VMSTAT을 이용한 CPU 사용량 활용법 | 에밀리오 | 2016.07.14 | 1113 |
8 | Kill Session Script (GV$SESSION) | 에밀리오 | 2016.07.12 | 2350 |
7 | Active Session History를 이용한 TOP SQL 분석 (GV$ACTIVE_SESSION_HISTORY) | 에밀리오 | 2016.07.12 | 1419 |
6 | DB에 생성된 ROLE의 생성 정보 확인 [2] | 명품관 | 2016.05.31 | 2404 |
5 | 내가 돌린 SQL ID 찾기 [1] | Talros | 2016.05.12 | 9031 |
» | 테이블 컬럼의 Default 값에 대한 흔적은 Dictionary에 계속 남게 된다. | 명품관 | 2016.04.05 | 1729 |
3 | Result Cache(oracle11g NF) [6] | ocm10gr2 | 2016.03.14 | 384 |
2 | Alert Log를 SQL 사용하여 보기 (X$DBGALERTEXT) [1] | 에밀리오 | 2016.01.28 | 2304 |
1 | Partition 추가의 계절 - Range Partition 추가시 알아 두어야할 부분 [1] | 명품관 | 2015.12.03 | 2551 |