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

Oracle修改表列名与顺序的解决方案 (sql 修改列名)

2012-06-26 16:19 239 查看
/article/3878775.html

Oracle 10g 修改表列名与顺序的解决方案- 下面介绍通过修改数值字典的方法修改表的列名:

 

 假设在 SCOTT帐号下有HB_TEST 表:

--------------------------------------------------------------------

--目的:调换STU_ID和STU_NAME的顺序;并把STU_ID 改为S_ID;

SQL>SELECT * FROM HB_TEST;

/**

STU_ID STU_NAME CRO_NAME GRADE

---------- ---------- ---------- ----------

1 张三 语文 68

2 李四 语文 88

3 王五 语文 72

4 小张 语文 65

1 张三 数学 90

2 李四 数学 62

3 王五 数学 94

4 小张 数学 75

1 张三 物理 50

2 李四 物理 60

3 王五 物理 70

4 小张 物理 80

*/

--第一步:

SQL>select OBJECT_name,object_id from all_objects

2 where object_name='HB_TEST';

/**

OBJECT_NAME OBJECT_ID

------------------------------ ----------

HB_TEST 49214

*/

--第二步:切换到sys帐号下

SQL>conn / as sysdba;

--第三步:

SQL>select obj#,col#,name from col$ where obj#=49214;

/**

OBJ# COL# NAME

---------- ---------- ----------

49214 1 STU_ID

49214 2 STU_NAME

49214 3 CRO_NAME

49214 4 GRADE

*/

--第四步: 下面可以通过修改这个系统表来使成为事实修改列名与顺序,注意,COL#就是列的顺序。

SQL>UPDATE COL$ SET COL#=2,name='S_ID'

2 WHERE OBJ#=49214 and name='STU_ID';

/**

OBJ# COL# NAME

--------- ---------- ---------

49214 2 S_ID

49214 2 STU_NAME

49214 3 CRO_NAME

49214 4 GRADE

*/

--再更新STU_NAME 的col# 的值;

SQL>UPDATE COL$ SET COL#=1,name='STU_NAME'

2 WHERE OBJ#=49214 and name='STU_NAME';

 

--第五步:再次查询

SQL>select obj#,col#,name from col$ where obj#=49214;

/**

  OBJ# COL# NAME

--------- ---------- --------

49214 2 S_ID

49214 1 STU_NAME

49214 3 CRO_NAME

49214 4 GRADE

*/

--第六步:提交修改

SQL>commit;

--第七步: 重启服务

SQL>SHUTDOWN IMMEDIATE; --关闭

SQL>STARTUP; --开启

--第八步:登录SCOTT账号,查询

SQL>SELECT * FROM HB_TEST;

/**

STU_NAME S_ID CRO_NAME GRADE

---------- ---------- ---------- ----------

张三 1 语文 68

李四 2 语文 88

王五 3 语文 72

小张 4 语文 65

张三 1 数学 90

李四 2 数学 62

王五 3 数学 94

小张 4 数学 75

张三 1 物理 50

李四 2 物理 60

王五 3 物理 70

小张 4 物理 80

*/

--第九步:查看表结构

SQL>desc HB_TEST;

/**

名称

--------------

STU_NAME

S_ID

CRO_NAME

GRADE

*/

--------------------------------------------------------------------

还有一种方法:

  如果创建表好了后,想修改表的定义可以使用alter table 命令,但是如果要修改列名或调整列的顺序时,alter table 命令将无能为力。当然可以使用原始措施,通过(create table 临时表 as select * from 源表
),之后把原来的表删除,再重修,之后使用 (insert into 新表 select 列1,列2 from 临时表 ) 就能够处理完成了,但是这样做需要有足够大的空间。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: