7. 移除欄位

移除(Drop)欄位。語法範例如下:
ALTER TABLE TEST.TEST_TABLE DROP COLUMN1 COMMENTS
CASCADE CONSTRANTS CHECKPOINT 1000;
以上的語法一次只能移除(Drop)一個欄位,如果一次想移除(Drop)一個以上的欄位。語法範例如下:
ALTER TABLE TEST.TEST_TABLE DROP (COLUMN1, COLUMN2);
  • 當執行移除(Drop)欄位Oracle會作兩動作:
    • 先將欄位的定義拿掉
    • 移除(Drop)資料(很花時間因為Oracle必須去讀它的Row Directory找到那些資料)。
  • 注意如果加上CASCADE CONSTRAINTS參數時,如果剛好那個欄位是Primary Key所在的欄位相關的表格會跟著移除(Drop)掉。
  • CHECKPOINT 1000是指每移除(Drop)多少筆資料會執行確認(Commit)動作。
  • 如果當移除(Drop)欄位到一半時Oracle當掉了,那怎麼辦?要知道當在尚未完成移除(Drop)欄位所有資料之前,此時Table的狀態是顯示埠可使用(Invalid),所以上面的所有相關的程式例如trigger、procedure等都無法使用,使用者也無法執行查詢動作,所以當Oracle資料庫在次開啟時必須執行以下語法使移除(Drop)欄位的動作繼續執行:
ALTER TABLE TEST.TEST_TABLE DROP COLUMN1 CONTINUE;

  • 移除欄位的限制
    • 不能移除巢狀表格(Nested Table)的欄位。
    • 不能對一個表格去移除所有的欄位。
    • 不能移除分割表格(Partition Table)裡面partition key的欄位因為當移除這個欄位 partition就完全沒關連。
    • 不能移除系統表格的欄位。
    • 不能移除索引組織表格(Index-Organized Table;IOT)上的主鍵(Primary Key) 所在的欄位。

沒有留言:

張貼留言