create table zchw(
c1 char
c2 varchar2(14)
c3 number(12)
);
我想在C3前面插入一列怎么做
ALTER TABLE zchw ADD (c4 number(3) [BEFORE c3]);
老出错呜呜;

解决方案 »

  1.   

    -- drop table zchw purge;
    create table zchw(
    c1 char,
    c2 varchar2(14),
    c3 number(12)
    );alter table zchw add c4 number(3);
    alter table zchw add c5 number(12);
    update zchw set c5=c3;
    alter table zchw drop column c3;
    alter table zchw rename column c5 to c3;
      

  2.   

    没办法。。只能删除重建因为oracle没有和sql server这样的功能。。可以先把数据保存在临时表里。。其实字段有顺序也没多大用处。。
      

  3.   

    【方法一:】你可以这样试试:
    ALTER TABLE zchw ADD (c4 number(3));
    这样在数据库表中,c4会排在c3前面,然后,用SYSTEM登录sqlplus进行操作:
    SQL> select object_id from all_objects where owner='SCOTT' and object_name='zchw';
         //【SCOTT是指你的数据库用户名,zchw是指你的数据库表名,all_objects系统表名】
         显示结果,例如:
         OBJECT_ID
         ----------
            6067然后
    SQL> select obj#,col#,name from sys.col$ where obj#=6067;
          显示结果,例如:
           OBJ#  COL#  NAME
          --------------------
           6067   1    c1
           6067   2    c2
           6067   3    c3
           6067   4    c4
    然后调整字段的顺序:
    SQL> update sys.col$ set COL#=5 where obj#=6067 and NAME='c3';
         1 row updated.
    SQL> update sys.col$ set col#=3 where obj#=6067 and NAME='c4';
         1 row updated.
    SQL> update sys.col$ set col#=4 where obj#=6067 and NAME='c3';
         1 row updated.
    SQL> commit;
    完成.
    由于数据字典是在数据库启动时加载到SQL中的,所以修改完成之后,还需要重启数据库服务。 
    SQL> shutdown immediate
         Database closed.
         Database dismounted.
         ORACLE instance shut down.SQL> startup
         ORACLE instance started.
    这时,再查看,就会发现修改已经成功。
    SQL> desc zchw;
         查看一下你的表中的字段吧!【方法二:】
    重新创建表,可以重新运行一下正确的sql脚本
    create table zchw(
    c1 char,
    c2 varchar2(14),
    c3 number(12),
    c4 number(3)
    );
    比较简便。希望对你有帮助
      

  4.   

    正解想问下列的顺序那么重要吗? 在select 后面调整下要查询列的位置不就可以了吗?
      

  5.   

    不好意思早上人不在
    如果不在乎这句话我就不会写出来,1楼的方法我会所以我不想给分,ALTER TABLE zchw ADD (c4 number(3) [BEFORE c3]);
    这句话一直报错所以我很纠结想找人找出问题所在
      

  6.   

    -- 我执行怎么没有错误呢?
    eygle@SZTYORA> drop table zchw purge;表已删除。eygle@SZTYORA> create table zchw(
      2  c1 char,
      3  c2 varchar2(14),
      4  c3 number(12)
      5  );表已创建。eygle@SZTYORA>
    eygle@SZTYORA> alter table zchw add c4 number(3);表已更改。eygle@SZTYORA> alter table zchw add c5 number(12);表已更改。eygle@SZTYORA> update zchw set c5=c3;已更新0行。eygle@SZTYORA> alter table zchw drop column c3;表已更改。eygle@SZTYORA> alter table zchw rename column c5 to c3;表已更改。eygle@SZTYORA>
      

  7.   

    1楼我没说你的错了。我说的是我的sql语句我纠结
    ALTER TABLE zchw ADD (c4 number(3) [BEFORE c3]);这句话我不知道错在哪里。。
      

  8.   

    都说了你的做法我早就会了,ALTER TABLE zchw ADD (c4 number(3) [BEFORE c3]);这句我无意中看
    我不知道这个写得对不对求证明白了吧,
      

  9.   

    是我写错了,还是根本就不存在这中SQL语句,明白不?