十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
alter table table_name add (e number(4));
创新互联专注于普陀企业网站建设,响应式网站设计,商城建设。普陀网站建设公司,为普陀等地区提供建站服务。全流程按需求定制制作,专业设计,全程项目跟踪,创新互联专业和态度为您提供的服务
oracle中不能在某列前后固定插入,只会在最后列中追加
插入新列不影响前面的数据
其实列的顺序是无所谓的,你查找的时候select a,b,e,c,d from A 不就可以了么
如果你非要这样那只能复制新的A表到B表,然后删除掉A表,并重命名B表,如:
create table B as select a,b,e,c,d from A
drop table A
alter table B rename A
添加列的语法是:
alter table table_name add (w number(4),y number(4));
但是你是无法控制新增的列在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;
------------------------------补充------------------------------------
就我所了解看来,你必须这样做。
你的列很多?有多少?有1000个吗?
表中列的顺序并不重要。你如果非要达到这种效果那么不得不付出代价。比如说:像上面将每个列都写上去。。。
数据不会丢失。
最好的方法是批量修改,即每次修改5000条(一次修改不要超过一万条,否则影响性能).
虽然在11g中,我们也可以选择使用merge命令,但你的这种情况最好先修改一部分然后看看影响,毕竟在生产环境作这样的操作风险很大。
如果是误操作,最好还是请DBA来恢复,虽然这样做会被挨骂,但总比错上加错,最后连挨骂的机会都没有要好得多。
如果对这些修改真的有信心,而只是从性能考虑,那可以用下面的方法(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;