ALTER TABLE LL_USERLICENCEMAP ADD PRE_NOTICE_DATE DATE;
commit;用以上SQL只能在表最后加上PRE_NOTICE_DATE 字段。
请教一下能不能指定第几列,得后面加上 字段。

解决方案 »

  1.   

    好像不可以呀,如果实在要这么做,
    可以考虑用一个表暂时存储你的数据,然后
    再创建 用这个方法创建:Create table your table as select fld1,fld2..... from tmptable;
      

  2.   

    以前试过,没找到过方法。
    可以先
    create table USERLICENCEMAP_temp as select 字段1,字段2,' ' PRE_NOTICE_DATE,字段3... from USERLICENCEMAP;
    这样加上字段。
    然后在drop掉USERLICENCEMAP,在用
    CREATE TABLE USERLICENCEMAP AS SELECT * FROM USERLICENCEMAP_temp;
    就可以了
      

  3.   

    ALTER TABLE LL_USERLICENCEMAP ADD PRE_NOTICE_DATE1 number(2)  AFTER EMP_NO;
    commit;比如我这个有很多列,EMP_NO是第一列,我就像在EMP_NO后加一列
    用上面的语句怎么就不行呢。
    提示ORA-01735: ALTER TABLE opreation 无效
      

  4.   

    其他数据库可以.oracl不可以吗?
      

  5.   

    其实,用中间表,这个方法我也想到拉。
    只是觉得mySQL里可以用,在oracl也应该可以用。
      

  6.   

    放在那个列后面,觉得没有任何意思,对Oracle管理来说都是一样!
      

  7.   

    为什么MySQL可以指定列的位置而Oracle则不行,要看它们各自的出发点:
    MySQL为什么如此受欢迎? 灵活地选择如何存储和检索你的数据的是主要原因。作为一种网络数据库(暂且这样说), 为了向User在Web上提供多样式的展现形式, MySQL有必要提供这样的功能
    而Oracle不同. 这只是两者的出发点不同罢了.
      

  8.   

    Oracle不支持,只能重新创建表。该问题无完美解决办法。因为重新创建表对在用系统有影响。   另外,可以结贴了。
      

  9.   

    赫赫,没有after关键词的。你非要想要的话,可以强制修改数据字典的序号。
    但是,不推荐这么做。赫赫。不知道会带来什么隐藏的问题。可以用中间表来做。
    当然,有人说用试图,也可以。
      

  10.   

    不觉得的麻烦的话,可以用RENAME,一个一个改过去。中间表的做法,最后用RENAME就可以了。不需要  create ..as select...的。
      

  11.   

    没必要这么做,如果非要为之的话,最好停掉服务,create 一遍。
      

  12.   

    30楼都过去了,没看到一个满意的答案..1. 且不说有没有方法,楼主的观念有些问题
      MYSQL可以的,ORACLE不可以是不是就说MYSQL比ORACLE强??? 这两个系统的体系架构完全不同, 为什么我们要求他们的实现方法一模一样呢? ORACLE可以的,有多少是MYSQL不可以的. 你知道吗?
    2. ORACLE认为没有任何必要开发一条SQL语句来专门完成你所提出的问题. 如果你确实需要做这样的事,则
    3. 解决方案一:
      如果你不考虑联机重定义的问题(估计MYSQL就做不倒联机重定义, 也希望你不要问我什么叫联机重定义),
      A. rename old_table to temp_table;
      B. create new_table 
      C. insert into new_table select col1, col2,null,col3,...coln from temp_table;
      D. COMMIT;
      其中假定你要加入的字段要放在COL3之前. 这套语句是效率最高的. 如有索引,则索引需重建.
    4. 解决方案二:
      使用9i开始的ONLINE REDEFINITION(联机重定义)功能,使用DBMS_REDEFINITION包来完成你的任务吧, 他可以保证任意改变你的表结构, 增减字段,修改类型,存储方式, 非分区变分区等等. 更重要的是,在执行改变的同时,客户端还可以继续对该表进行DML操作(即使你的改变根据数据量不同需要一点时间完成).
      具体使用方法,见手册(Oracle® Database PL/SQL Packages and Types Reference).对于3楼的方案, 有一个小小的疑问, 您如何确保新加字段的数据类型为所需要的, 且完成创建后,默认为空值呢?
      

  13.   

    补充一句,不是要冒犯楼主, 不过开发人员切忌简单对比. 先问一下自己是否对这个产品了解多少比较好一点. 还有一种更简单的方法,就是:1. create table t (col1 varchar2(10), col3 number); /*你原先的表定义*/
    2. alter table t add col2 number;    /*修改表结构*/
    3. create or replace view v as select col1,col2,col3 from t; /*所需的额外操作*/以后你就直接对V进行操作好了, V就是你所要的那个表. 如果你觉得V名字不好听, 那就先RENAME T TO T_OLD; 然后CREATE VIEW T AS SELECT COL1, COL2,COL3 FROM T_OLD;好了。这样就更象了. 如果你需要加索引,加在T_OLD上就行, 对该视图的任何DML, SELECT操作跟对T_OLD是一摸一样的. 这样甚至都就不存在数据搬来搬去的问题了。