移除(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) 所在的欄位。
沒有留言:
張貼留言