如需转载,请注明出处!用过ORACLE的人都知道,要想在ORACLE中更改表的列名和顺序可是一件很烦琐的事,下面给大家提供一种简单的方法。SQL>
select object_id from all_objects where owner=’SCOTT’ and
object_name=’T1′;OBJECT_ID———-6067SQL> select
obj#,col#,name from sys.col$ where obj#=6067;OBJ# COL#———-
———-NAME————————————————————6067
1ID6067 2NAMESQL> update sys.col$ set name=’NEW_ID’ ,col#=3 where
obj#=6067 and name=’ID’;1 row updated.SQL> update sys.col$ set
name=’MY_NAME’,col#=1 where obj#=6067 and name=’NAME’;1 row
updated.SQL> update sys.col$ set col#=2 where obj#=6067 and
col#=3;1 row updated.SQL> commit;Commit complete.SQL> select *
from scott.t1;ID NAME———- ——————–3 cheng2 yong1 xin2
gototop1 topcio2 yongxin1 cyx7 rows selected.SQL> shutdown
immediateDatabase closed.Database dismounted.ORACLE instance shut
down.SQL> startupORACLE instance started.Total System Global Area
128159368 bytesFixed Size 732808 bytesVariable Size 117440512
bytesDatabase Buffers 8388608 bytesRedo Buffers 1597440 bytesDatabase
mounted.Database opened.SQL> select * from scott.t1;MY_NAME
NEW_ID——————– ———-cheng 3yong 2xin 1gototop 2topcio
1yongxin 2cyx 17 rows
selected.到此为止我们已经把SCOTT.T1表中的列名和顺序都给该了,如果你只想改变顺序而不想改变列名,只需再进行UPDATE就可以了,之所以不能一次完成是因为SYS.COL$中COL#,NAME都是UNIQUE的。这种方法虽然存在一定风险,但对于特别大的表效果是很明显的,而用一般的方法将需要更多的存储空间、回滚段和时间开销。

发表评论

电子邮件地址不会被公开。 必填项已用*标注