oracle修改表字段順序三種方式:
1、重建表
--備份目標表數據:
CREATE TABLE TABLE_TEMP_NAME AS SELECT * FROM TABLE_NAME;
--刪除目標表
DROP TABLE TABLE_NAME;
--按照目標順序重建表
CREATE TABLE TABLE_NAME (COLUMN1,COLUMN2,...);
--還原數據
INSERT INTO TABLE_NAME SELECT COLUMN1,COLUMN2(新順序) FROM TABLE_TEMP_NAME;
2、修改sys的數據字典
--查出表所對應的OBJECT_ID
--DBA用戶使用
SELECT OBJECT_ID FROM ALL_OBJECTS WHERE OWNER='OWNER_NAME' AND OBJECT_NAME='TABLE_NAME';
--表歸屬用戶可以使用
SELECT OBJECT_ID FROM OBJ WHERE OBJECT_NAME='TABLE_NAME';
--通過ID查出該表所有字段的順序
SELECT OBJ#,COL#,NAME FROM SYS.COL$ WHERE OBJ#=OBJECT_ID ORDER BY COL#;
--更新SYS.COL$的COL#列的值,需要有DBA權限
UPDATE SYS.COL$ SET COL#=NEW_PLACE_NUM WHERE OBJ#=OBJECT_ID AND NAME='COLUMN_NAME';
--需要調整所有受影響的列的COL#的值
--提交事務
commit;
--需重啓oracle服務,才能生效。
3、通過修改列屬性來實現,此功能12C才支持
--將涉及調整順序的字段列的屬性修改爲INVISIBLE
ALTER TABLE TABLE_NAME MODIFY( COLUMN1 INVISIBLE, COLUMN2 INVISIBLE, COLUMN3 INVISIBLE);
--此時通過第2種方式中的方式查詢標誌字段順序,可以看出已經修改爲INVISIBLE的列的COL#列的值爲空了,DESC TABLE_NAME也看不到修改爲INVISIBLE的列了
--按照新的順序將表字段的列更新爲VISIBLE
ALTER TABLE TABLE_NAME MODIFY( COLUMN3 VISIBLE, COLUMN2 VISIBLE, COLUMN1 VISIBLE);
--此時再查看錶字段的順序已經調整好了