alter table table_name add (e number(4));
創(chuàng)新互聯(lián)專注于普陀企業(yè)網(wǎng)站建設(shè),響應(yīng)式網(wǎng)站設(shè)計(jì),商城建設(shè)。普陀網(wǎng)站建設(shè)公司,為普陀等地區(qū)提供建站服務(wù)。全流程按需求定制制作,專業(yè)設(shè)計(jì),全程項(xiàng)目跟蹤,創(chuàng)新互聯(lián)專業(yè)和態(tài)度為您提供的服務(wù)
oracle中不能在某列前后固定插入,只會(huì)在最后列中追加
插入新列不影響前面的數(shù)據(jù)
其實(shí)列的順序是無(wú)所謂的,你查找的時(shí)候select a,b,e,c,d from A 不就可以了么
如果你非要這樣那只能復(fù)制新的A表到B表,然后刪除掉A表,并重命名B表,如:
create table B as select a,b,e,c,d from A
drop table A
alter table B rename A
添加列的語(yǔ)法是:
alter table table_name add (w number(4),y number(4));
但是你是無(wú)法控制新增的列在1,2,3,4,5前面。只能采用變通的方法;
1 如上先把列添加上。
2 然后
create table table_name1 select (A,B,C...,W,Y,1,2,3,4,5) from table_name;
3 drop table table_name;
4 alter table table_name1 rename table_name;
------------------------------補(bǔ)充------------------------------------
就我所了解看來(lái),你必須這樣做。
你的列很多?有多少?有1000個(gè)嗎?
表中列的順序并不重要。你如果非要達(dá)到這種效果那么不得不付出代價(jià)。比如說(shuō):像上面將每個(gè)列都寫上去。。。
數(shù)據(jù)不會(huì)丟失。
最好的方法是批量修改,即每次修改5000條(一次修改不要超過(guò)一萬(wàn)條,否則影響性能).
雖然在11g中,我們也可以選擇使用merge命令,但你的這種情況最好先修改一部分然后看看影響,畢竟在生產(chǎn)環(huán)境作這樣的操作風(fēng)險(xiǎn)很大。
如果是誤操作,最好還是請(qǐng)DBA來(lái)恢復(fù),雖然這樣做會(huì)被挨罵,但總比錯(cuò)上加錯(cuò),最后連挨罵的機(jī)會(huì)都沒(méi)有要好得多。
如果對(duì)這些修改真的有信心,而只是從性能考慮,那可以用下面的方法(pk_col 是表的主鍵):
merge into xxx aa
using (select pk_col from xxx) bb
on (aa.pk_col=bb.pk_col)
when matched then
update set aa.datatype=66 where aa.datatype is null;