如何更改表中列的顺序
时间:2010-11-18 来源:benxiong
在Oracle中创建表后,如果想修改表的定义可以使用alter table 命令,但是如果要修改列名或调整列的顺序时,alter table 命令将无能为力。当然可以使用原始办法,[ 通过create table 临时表 as select * from 源表 ],然后把原来的表删除,再重建,然后使用 [ insert into 新表 select 列1,列2 from 临时表 ] 就可以解决了,但是这样做需要有足够大的空间。
下面介绍通过修改数据字典的方法修改表的列名:
假设在 HR帐号下有EMP_COPY 表(ID,NAME,DID),现决定要修改为EMP_COPY(ID,DEPARTID,ENAME)
即修改列名与顺序。
步骤: 1. 在HR帐号下使用下面命令查询EMP_COPY对象的编号: SQL>
1 select OBJECT_name,object_id from all_objects
2* where object_name='EMP_COPY'
SQL> / OBJECT_NAME OBJECT_ID
------------------------------ ----------
EMP_COPY 50555 2.切换到sys帐号下 SQL> conn sys/password as sysdba;
Connected.
SQL> select obj#,col#,name from col$
2 where obj#=50555; OBJ# COL# NAME
---------- ---------- ----------------------------
50555 1 ID
50555 2 NAME
50555 3 DID Elapsed: 00:00:00.03
SQL> 3. 下面可以通过修改这个系统表来实现修改列名与顺序,注意,COL#就是列的顺序。 UPDATE COL$ SET COL#=2,name='DEPARTID'
WHERE OBJ#=50555 and name='DID'; UPDATE COL$ SET COL#=3,name='ENAME'
WHERE OBJ#=50555 and name='NAME' 4. 再次查询 SQL> select obj#,col#,name from col$
2 where obj#=50555; OBJ# COL# NAME
---------- ---------- ------------------------------
50555 1 ID
50555 3 ENAME
50555 2 DEPARTID 5. 提交修改 SQL>commit ; 6. 重启服务 SQL> SHUTDOWN IMMEDIATE SQL>STARTUP 7. 登录HR,查询SELECT * FROM EMP_COPY; SQL> desc emp_copy;
Name
-----------------------
ID
DEPARTID
ENAME
即修改列名与顺序。
步骤: 1. 在HR帐号下使用下面命令查询EMP_COPY对象的编号: SQL>
1 select OBJECT_name,object_id from all_objects
2* where object_name='EMP_COPY'
SQL> / OBJECT_NAME OBJECT_ID
------------------------------ ----------
EMP_COPY 50555 2.切换到sys帐号下 SQL> conn sys/password as sysdba;
Connected.
SQL> select obj#,col#,name from col$
2 where obj#=50555; OBJ# COL# NAME
---------- ---------- ----------------------------
50555 1 ID
50555 2 NAME
50555 3 DID Elapsed: 00:00:00.03
SQL> 3. 下面可以通过修改这个系统表来实现修改列名与顺序,注意,COL#就是列的顺序。 UPDATE COL$ SET COL#=2,name='DEPARTID'
WHERE OBJ#=50555 and name='DID'; UPDATE COL$ SET COL#=3,name='ENAME'
WHERE OBJ#=50555 and name='NAME' 4. 再次查询 SQL> select obj#,col#,name from col$
2 where obj#=50555; OBJ# COL# NAME
---------- ---------- ------------------------------
50555 1 ID
50555 3 ENAME
50555 2 DEPARTID 5. 提交修改 SQL>commit ; 6. 重启服务 SQL> SHUTDOWN IMMEDIATE SQL>STARTUP 7. 登录HR,查询SELECT * FROM EMP_COPY; SQL> desc emp_copy;
Name
-----------------------
ID
DEPARTID
ENAME
相关阅读 更多 +