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、需要开通DBA权限,最好通过sysdba登录:修改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);
–此时再查看表字段的顺序已经调整好了