今天才遇到這個問題,看了很多資料,自己記錄一下,以後學習看備用。
總結了一下,網上就是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許可權,以及重新啟動服務才會生效。
Oracle中修改表中欄位名
更改欄位名 modify 不能用於更改欄位名 alter table emp modify address address err 解決方法 create table ut as select name,tel,id empid from emp 將 emp中資料取出並存到新建的表ut中,並將字段i...
如何oracle修改字段型別
因為業務需要,修要修改某個字段資料型別有number 5 變為number 5,2 型 要是沒有資料的話直接用以下語句即可 alter table tb test modify permile number 5,2 但是有資料的話 就不能用上面方法了,alter table tb test add ...
Oracle 如何修改字段型別
alter table 表名 modify 列名 varchar2 2000 本方法只支援同型別間轉換 如 varchar2 255 轉成 varchar2 2000 如果有資料那就要麻煩一些了,大體思路如下 首先將要更改型別的欄位名改名以備份,然後新增乙個與要更改型別的欄位名同名的字段 原欄位已經...