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);

–此时再查看表字段的顺序已经调整好了

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐