8. 將欄位設定成不使用狀態與修改欄位

將欄位設定成不使用狀態
執行不使用(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語法看不到。
  • 當欄位已被設成UNUSED要如何將此欄位移除(Drop),執行步驟如下
    步驟 1. 將欄位設成UNUSED
    步驟 2. 執行移除(Drop)UNUSED欄位語法。
ALTER TABLE TEST.TEST_TABLE DROP UNUSED COLUMNS CHECKPOINT 1000;
說明
當執行移除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);
注意當進行修改表格欄位資料型態的值時,此表格會被鎖定(Table Lock)。

沒有留言:

張貼留言