프린트 하기

내맘대로긍정이 알려주는

Oracle 23ai 신기능
무료 세미나 발표자료

다운로드 trending_flat

OS환경 : Oracle Linux 7.6 (64bit)

 

DB 환경 : Oracle Database 12.2.0.1

 

방법 : 오라클 12c 테이블 컬럼 순서 변경(invisible 컬럼 속성)

오라클 12c 부터 테이블 컬럼의 순서를 변경하는 방법이 생김

정확히는 컬럼을 invisible (숨김처리) 시킨 후 다시 visible (보임처리) 하면 제일 뒤로 가는 방식을 이용하는것

 

 

col1, col2, col3 컬럼을 가진 invisible_tab 테이블 생성 후 col1을 invisible 처리 한 뒤 다시 visible하는 시나리오

DB 버전 조회

1
2
3
4
5
SQL> select version from v$instance;
 
VERSION
-----------------
12.2.0.1.0

 

 

테스트 유저 생성 및 권한 부여

1
2
3
4
5
6
7
8
9
10
11
SQL> create user test identified by test account unlock;
 
User created.
 
SQL> grant resource, connect to test;   
 
Grant succeeded.
 
SQL> alter user test quota unlimited on users;
 
User altered.

 

 

테스트 테이블 생성

1
2
3
4
SQL> conn test/test
SQL> create table invisible_tab (col1 number, col2 varchar2(5), col3 number);
 
Table created.

 

 

테스트 데이터 삽입

1
2
3
4
5
6
7
SQL>
insert into invisible_tab values (1'A'1);
insert into invisible_tab values (2'B'2);
insert into invisible_tab values (3'C'3);
insert into invisible_tab values (4'D'4);
insert into invisible_tab values (5'E'5);
commit;

 

 

테이블 구조 조회(COL1, COL2, COL3 순서)

1
2
3
4
5
6
SQL> desc invisible_tab
 Name                       Null?    Type
 ----------------------------------------- -------- ----------------------------
 COL1                            NUMBER
 COL2                            VARCHAR2(5)
 COL3                            NUMBER

 

 

테이블 내용 조회

1
2
3
4
5
6
7
8
9
SQL> select * from invisible_tab;
 
      COL1 COL2        COL3
---------- ----- ----------
     1 A          1
     2 B          2
     3 C          3
     4 D          4
     5 E          5

 

 

COL1 컬럼 invisible 로 변경(숨김처리)

1
2
3
SQL> alter table invisible_tab modify (col1 invisible);
 
Table altered.

 

 

테이블 구조 조회

1
2
3
4
5
6
SQL> desc invisible_tab;
 
 Name                       Null?    Type
 ----------------------------------------- -------- ----------------------------
 COL2                            VARCHAR2(5)
 COL3                            NUMBER

 

 

테이블 내용 조회

1
2
3
4
5
6
7
8
9
SQL> select * from invisible_tab;
 
COL2        COL3
----- ----------
A           1
B           2
C           3
D           4
E           5

 

 

COL1 컬럼만 조회

1
2
3
4
5
6
7
8
9
SQL> select col1 from invisible_tab;
 
      COL1
----------
     1
     2
     3
     4
     5

desc, select * from 에는 나오지 않지만 컬럼만 개별 조회는 가능

 

 

딕셔너리에서 조회

1
2
3
4
5
6
7
8
9
10
11
SQL>
 SELECT name,col#,intcol#,segcol#,
 TO_CHAR (property,'XXXXXXXXXXXX') property
 FROM sys.col$
 WHERE obj# = (SELECT obj# FROM sys.obj$ WHERE name = 'INVISIBLE_TAB');
 
NAME     COL#     INTCOL#    SEGCOL# PROPERTY
---------- ---------- ---------- ---------- -------------
COL1            0           1      1    400000020
COL2            1           2      2        0
COL3            2           3      3        0

COL#이 0으로 변경되고 PROPERTY 값이 생김

 

 

COL1 컬럼 visible 로 변경(보임처리)

1
2
3
SQL> alter table invisible_tab modify (col1 visible);
 
Table altered.

 

 

테이블 구조 조회

1
2
3
4
5
6
7
SQL> desc invisible_tab
 
 Name                       Null?    Type
 ----------------------------------------- -------- ----------------------------
 COL2                            VARCHAR2(5)
 COL3                            NUMBER
 COL1                            NUMBER

 

 

테이블 내용 조회

1
2
3
4
5
6
7
8
9
SQL> select * from invisible_tab;
 
COL2        COL3       COL1
----- ---------- ----------
A           1      1
B           2      2
C           3      3
D           4      4
E           5      5

컬럼의 순서가 변경되었음을 확인 가능함

 

 

딕셔너리에서 조회

1
2
3
4
5
6
7
8
9
10
11
SQL>
 SELECT name,col#,intcol#,segcol#,
 TO_CHAR (property,'XXXXXXXXXXXX') property
 FROM sys.col$
 WHERE obj# = (SELECT obj# FROM sys.obj$ WHERE name = 'INVISIBLE_TAB');
 
NAME     COL#     INTCOL#    SEGCOL# PROPERTY
---------- ---------- ---------- ---------- -------------
COL1            3           1      1        0
COL2            1           2      2        0
COL3            2           3      3        0

COL#이 3으로 변경되고 PROPERTY 값이 없어짐

 

 

위 방법으로 컬럼 순서 변경이 가능하지만

특정 버전에서 해당 방법으로 변경한 뒤 시스템뷰에서 제대로 반영이 안되서 문제가 되었던 경우를 본적있음

운영DB에 적용할 경우 충분한 테스트를 거친 뒤 적용하기를 권고함

 

 

12c_invisible테스트_.txt
다운로드

 

 

참조 : http://www.oracle.com/technetwork/articles/database/invisible-columns-odb12c-2331522.html