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

2021-08-13 21:01:08 字數 1444 閱讀 6115

今天才遇到這個問題,看了很多資料,自己記錄一下,以後學習看備用。

總結了一下,網上就是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 如果有資料那就要麻煩一些了,大體思路如下 首先將要更改型別的欄位名改名以備份,然後新增乙個與要更改型別的欄位名同名的字段 原欄位已經...