您的位置:首页 > 数据库 > Oracle

Oracle 如何修改表中字段顺序?

2013-12-09 13:03 309 查看
今天才遇到这个问题,看了很多资料,自己记录一下,以后学习看备用。

总结了一下,网上就是2种经典的方法。

首先说一下,你要明白为什么要改字段顺序?字段顺序是死的吗?需要改吗?用客户端工具,拖动一下不就好了吗?明白了这些,你再来看

粘贴过来看一下,

方法一:

--(1)备份目标表数据

create table 临时表 as select * from 目标表;

--(2)drop 目标表

drop table 目标表;

--(3)再重新按照要求的字段顺序建表;

create table 临时表 (col1,................coln);

--(4)之后用select将数据从临时表导回。

方法二:

--第1步 创建测试表

create table TEST (A VARCHAR2(10),B VARCHAR2(10),C VARCHAR2(10),D VARCHAR2(10));

--第2步 查询出表的id,注意:owner和object_name的值要大写

--DBA用户使用

select object_id from all_objects where owner='CHINAJFK' and object_name='TEST';--本例结果为52206

--表归属用户可以使用

select object_id from obj where object_name='TEST';--本例结果为52206

--第3步 通过id查出该表所有字段的顺序

select obj#,col#,name from sys.col$ where obj#=52206 order by col#;

--第4步 更新字段顺序,需要sys用户或是System用户 as sysdba登录,或是其他拥有sysdba权限的用户,但是这里的操作一定要小心。

--(1)更新目标字段的col#

update sys.col$ set col#=4 where obj#=52206 and name='A';

--(2)更新受影响字段的col#,自己根据情况自己组织语句

update sys.col$ set col#=col#-1 where obj#=52206 and name!='A';

--(3)提交

commit;

--第5步 重启Oralce服务

--第6部 检查是否生效

select obj#,col#,name from sys.col$ where obj#=52206 order by col#;

select * from chinajfk.test;

总的来说,第一种还是相对方便一点,只要你有oracle对那张表的删除,修改权限即可。

第二种,能在此基础上进行修改,应该是大家一般期待的那种,但是比较繁琐,需要有dba权限,以及重新启动服务才会生效。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: