將欄位設定成不使用狀態
執行不使用(UNUSED)語法
因為移除(Drop)欄位很花時間所以 Oracle給另一種選擇Unused。語法範例如下:
ALTER TABLE TEST.TEST_TABLE SET UNUSED COLUMN1 COMMENTS CASCADE CONSTRAINTS;
|
以上的語法一次只能設定一個欄位,如果一次想設定一個以上的欄位。語法範例如下:
ALTER TABLE TEST.TEST_TABLE SET UNUSED(COLUMN1, COLUMN2);
|
- 不使用(UNUSED)的指令是將那個欄位的名稱改掉,會使正常的SQL語法看不到,如果想確認到改完之後的欄位的名稱可以下列步驟查詢:
步驟 1. 確認Object ID,語法如下:
SELECT OBJECT_NAME,OBJECT_ID FROM DBA_OBJECTS WHERE OBJECT_NAME=’TEST_TABLE’;
|
步驟 2. 以步驟 1查詢的Object ID確認欄位名稱是否已變更,語法如下:
SELECT OBJ#,COL#,NAME FROM SYS.COL$ WHERE OBJ# = '30317';
|
說明
在步驟2可以確認欄位COLUMN1與COLUMN2的名稱已經被更名了,同時COL#也被改成0,也因為COL#是0所以SQL語法看不到。
在步驟2可以確認欄位COLUMN1與COLUMN2的名稱已經被更名了,同時COL#也被改成0,也因為COL#是0所以SQL語法看不到。
- 當欄位已被設成UNUSED要如何將此欄位移除(Drop),執行步驟如下
步驟 1. 將欄位設成UNUSED
步驟 2. 執行移除(Drop)UNUSED欄位語法。
ALTER TABLE TEST.TEST_TABLE DROP UNUSED COLUMNS CHECKPOINT 1000;
|
說明
當執行移除UNUSED欄位指令時,Oracle會去找 sys.col$ 下如果col# 是為0的欄位就會將它移除。
當執行移除UNUSED欄位指令時,Oracle會去找 sys.col$ 下如果col# 是為0的欄位就會將它移除。
- 查詢DBA_UNUSED_COL_TABS確認UNUSED欄位。語法如下:
SELECT * FROM DBA_UNUSED_COL_TABS;
|
修改欄位
修改欄位名稱。語法範例如下:
ALTER TABLE TEST.TEST_TABLE RENAME COLUMN COLUMN3 TO COLUMN1;
|
- 當進行修改表格欄位名稱時,此表格會被鎖定(Table Lock)。修改欄位的資料型態。語法範例如下:
ALTER TABLE TEST.TEST_TABLE MODIFY COLUMN1 CHAR(1);
|
- 當進行修改表格欄位的資料型態時,此表格會被鎖定(Table Lock)。
- 當進行修改表格欄位的資料型態時,表格裡面不能有任何資料,因此需要先將此表格資
- 備份出來例如EXPORT與IMPORT方式,再進行欄位資料型態修改動作。修改欄位資料型態的值。語法範例如下:
ALTER TABLE TEST.TEST_TABLE MODIFY COLUMN1 VARCHAR(1);
|
沒有留言:
張貼留言