출처 : http://forums.oracle.com/forums/thread.jspa?threadID=470776&tstart=330
일반적으로 table column의 이름을 변경할수 있는 방법은 sql syntax에서 지원되지 않는다.
그러므로 다음과 같은 3가지 방법을 이용해 컬럼의 이름을 변경할수 있겠다.
1. create table .. as select 이용하여 loc 컬럼을 locc로 변경
SQL> desc dept
Name Null? Type
------------------------------------------------
DEPTNO NOT NULL NUMBER(2)
DNAME VARCHAR2(14)
LOC VARCHAR2(13)
SQL> rename dept to ddd;
SQL> create table dept (deptno,dname,locc)
2 as select deptno, dname,loc from ddd;
SQL> desc dept
Name Null? Type
------------------------------------------------
DEPTNO NOT NULL NUMBER(2)
DNAME VARCHAR2(14)
LOCC VARCHAR2(13)
SQL> drop table ddd;
2. view를 이용하는 방법
반드시 같은 이름의 view를 사용해야 한다면 기존 테이블을 rename 한다.
SQL> rename dept to ddd;
SQL> create view dept (deptno, dname, locc)
2 as select deptno, dname, loc from ddd;
3. col$ base table을 변경하는 방법
base table을 통하여 column의 이름을 변경하는 것은 숙련된 DBA에 의해서만
수행되어야하며 만약 잘못 수행됐을 경우 data dictionary 가 invalid 상태로 되어
database를 복구할수 없는 상태까지되어 다시 재생성해야하는 위험부담이 있다.
그러므로 테이블의 재생성이나 view를 사용하는것이 불가능한 최후의 방법으로 사용되어야 한다.
SQL> connect sys/manager
SQL> select obj#, col#, name from col$ where name = 'LOC' and
2 obj# = (select object_id from all_objects where object_type = 'TABLE'
3 and owner = 'SCOTT' and object_name = 'DEPT');
OBJ# COL# NAME
------------------------------------
1057 3 LOC
SQL> update col$ set name = 'LOCCC'
2 where name = 'LOC' and
3 obj# = (select object_id from all_objects where object_type = 'TABLE'
4 and owner = 'SCOTT' and object_name = 'DEPT');
SQL> commit;
상기 작업은 sys user로 수행되어야 하며 반드시 shutdown 후 startup을
해주어 변경한 내용이 반영될 수 있도록 한다.
Reference Documents
--------------------------------------------------------------------------------
<Note:121000.1>
'::: DB ::: > Oracle' 카테고리의 다른 글
[OTN] ALTER USER를 실행한 사용자를 확인하는 방법(SYSTEM EVENT TRIGGER) (0) | 2010.12.13 |
---|---|
[OTN] INVALID 상태의 OBJECT를 RECOMPILE하는 PROCEDURE (0) | 2010.12.10 |
[OTN] 힌트를 사용할 때 고려되어야 하는 사항 (0) | 2010.12.10 |
[OTN] LOB DATA 를 다른 TABLESPACE로 옮기는 방법 (0) | 2010.12.10 |
How to Setup Generic Connectivity - HSODBC - to MySQL (0) | 2010.12.09 |