> table의 column을 삭제하는 기능이 추가되었다고 들었는데...
>
> 어떻게 한 table에서 원하는 column을 삭제할 수 있나요???
>
> 아니면 제가 잘못알고있는건가요?
>
저도 8i는 현재 테스트용으로 사용중이라 자세히는 알지 못합니다.
매뉴얼을 참조하여 잠깐 테스트한 바에 의하면 다음과 같은 결론이 나오는군요.
unused 는 칼럼을 drop 하는 옵션 중의 하나입니다.
그래서 unused를 사용하면 실제로 디스크상의 스페이스는 재사용할 수 없고
데이타도 있지만 drop 된 것과 같다고 합니다.
그리고 USER_UNUSED_COL_TABS, DBA_UNUSED_COL_TABS, ALL_UNUSED_COL_TABS 를
통해서 삭제된 칼럼을 확인할 수 있다고 합니다.
그리고 비록 데이타 있다고 하더라도 확인할 수 없고,
같은 이름의 칼럼은 새롭게 만들수 있다고 하네요.
그런데 새로 만드니까 당연히 데이타는 하나도 없겠지요?
아래 매뉴얼 일부와 테스트 결과입니다.
SET UNUSED
--------------------------
marks one or more columns as unused. Specifying this clause does
not actually remove the target columns from each row in the table
(that is, it does not restore the disk space used by these columns).
Therefore, the response time is faster than it would be if you execute
the DROP clause.
You can view all tables with columns marked as unused in the data
dictionary views USER_UNUSED_COL_TABS, DBA_UNUSED_COL_
TABS, and ALL_UNUSED_COL_TABS. For information on these
views, see Oracle8i Reference.
Unused columns are treated as if they were dropped, even though
their column data remains in the table’s rows. After a column has
been marked as unused, you have no access to that column. A
"SELECT *" query will not retrieve data from unused columns. In
addition, the names and types of columns marked unused will not be
displayed during a DESCRIBE, and you can add to the table a new
column with the same name as an unused column.
SQL> create table t1 as select * from emp ;
Table created.
SQL> desc t1
Name Null? Type
----------------------------------------- -------- ----------------
EMPNO NOT NULL NUMBER(4)
ENAME VARCHAR2(10)
JOB VARCHAR2(9)
MGR NUMBER(4)
HIREDATE DATE
SAL NUMBER(7,2)
COMM NUMBER(7,2)
DEPTNO NUMBER(2)
SQL> select EMPNO, SAL from t1;
EMPNO SAL
---------- ----------
7369 800
7499 1600
7521 1250
7566 2975
7654 1250
7698 2850
7782 2450
7788 3000
7839 5000
7844 1500
7876 1100
EMPNO SAL
---------- ----------
7900 950
7902 3000
7934 1300
SQL> alter table t1 set unused ( SAL ) ;
Table altered.
칼럼을 drop 시키려면 위의 명령 대신에 아래를 사용하면 됩니다.
SQL> alter table t1 drop ( SAL ) ;
Table altered.
SQL> desc t1
Name Null? Type
----------------------------------------- -------- ---------------------
EMPNO NOT NULL NUMBER(4)
ENAME VARCHAR2(10)
JOB VARCHAR2(9)
MGR NUMBER(4)
HIREDATE DATE
COMM NUMBER(7,2)
DEPTNO NUMBER(2)
SQL> alter table t1 add ( SAL NUMBER(7,2) ) ;
Table altered.
SQL> desc t1
Name Null? Type
----------------------------------------- -------- ------------------
EMPNO NOT NULL NUMBER(4)
ENAME VARCHAR2(10)
JOB VARCHAR2(9)
MGR NUMBER(4)
HIREDATE DATE
COMM NUMBER(7,2)
DEPTNO NUMBER(2)
SAL NUMBER(7,2)
SQL> select EMPNO, SAL from t1 ;
EMPNO SAL
---------- ----------
7369
7499
7521
7566
7654
7698
7782
7788
7839
7844
7876
EMPNO SAL
---------- ----------
7900
7902
7934
|