Oracle修改表列名与顺序的解决方案 (sql 修改列名)
http://hb-keepmoving.iteye.com/blog/804297
Oracle 10g 修改表列名與順序的解決方案- 下面介紹通過修改數(shù)值字典的方法修改表的列名:
假設(shè)在 SCOTT帳號(hào)下有HB_TEST 表:
--------------------------------------------------------------------
--目的:調(diào)換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 張三?????? 數(shù)學(xué)?????????????? 90
???????? 2 李四?????? 數(shù)學(xué)?????????????? 62
???????? 3 王五?????? 數(shù)學(xué)?????????????? 94
???????? 4 小張?????? 數(shù)學(xué)?????????????? 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帳號(hào)下
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???
*/
--第四步: 下面可以通過修改這個(gè)系統(tǒng)表來使成為事實(shí)修改列名與順序,注意,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;
--第七步: 重啟服務(wù)
SQL>SHUTDOWN IMMEDIATE; --關(guān)閉
SQL>STARTUP;???? --開啟
--第八步:登錄SCOTT賬號(hào),查詢
SQL>SELECT * FROM HB_TEST;
/**
STU_NAME???????? S_ID CRO_NAME??????? GRADE
---------- ---------- ---------- ----------
張三??????????????? 1 語文?????????????? 68
李四??????????????? 2 語文?????????????? 88
王五??????????????? 3 語文?????????????? 72
小張??????????????? 4 語文?????????????? 65
張三??????????????? 1 數(shù)學(xué)?????????????? 90
李四??????????????? 2 數(shù)學(xué)?????????????? 62
王五??????????????? 3 數(shù)學(xué)?????????????? 94
小張??????????????? 4 數(shù)學(xué)?????????????? 75
張三??????????????? 1 物理?????????????? 50
李四??????????????? 2 物理?????????????? 60
王五??????????????? 3 物理?????????????? 70
小張??????????????? 4 物理?????????????? 80
*/
--第九步:查看表結(jié)構(gòu)
SQL>desc HB_TEST;
/**
名稱
--------------
STU_NAME
S_ID
CRO_NAME
GRADE
*/
--------------------------------------------------------------------
還有一種方法:
如果創(chuàng)建表好了后,想修改表的定義可以使用alter table 命令,但是如果要修改列名或調(diào)整列的順序時(shí),alter table 命令將無能為力。當(dāng)然可以使用原始措施,通過(create table 臨時(shí)表 as select * from 源表 ),之后把原來的表刪除,再重修,之后使用? (insert into 新表 select 列1,列2 from 臨時(shí)表 ) 就能夠處理完成了,但是這樣做需要有足夠大的空間。
總結(jié)
以上是生活随笔為你收集整理的Oracle修改表列名与顺序的解决方案 (sql 修改列名)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 上海出租车价格计算方法
- 下一篇: 如何应用Java的可变参数