Oracle怎么给表的特定位置增加字段原来的表:
Table T_Table
(
Name Varchar2(11),
Sex Char(1)
)
要变成
Table T_Table
(
Name Varchar2(11),
Age Number(3),
Sex Char(1)
)的SQL语句?

解决方案 »

  1.   

    在两个字段之间加新字段,用sql语句是实现不了的
    除非你在企业管理器里操作,或者先把原表删除再建新表字段的顺序在哪里都是无所谓的,使用时可以用select 语句决定它的先后顺序
      

  2.   

    alter table T_Table 
    add Age Number(3); 
      

  3.   

    需要sys用户才可以修改。例如:SQL> CREATE TABLE T_TABLE(NAME VARCHAR2(11),SEX CHAR(1),AGE NUMBER(3));
     
    Table created
     
    SQL> DESC T_TABLE
    Name Type         Nullable Default Comments 
    ---- ------------ -------- ------- -------- 
    NAME VARCHAR2(11) Y                         
    SEX  CHAR(1)      Y                         
    AGE  NUMBER(3)    Y                         
     
    SQL> 
    SQL> UPDATE SYS.COL$
      2  SET    COL# = DECODE(COL#, 2, 3, 2)
      3  WHERE  obj# = (SELECT OBJECT_ID
      4                 FROM   ALL_Objects
      5                 WHERE  object_name = 'T_TABLE'
      6                 AND    OWNER = 'SYS'
      7                 AND    SUBOBJECT_NAME IS NULL)
      8  AND  COL# > 1;
     
    2 rows updated
     
    SQL> COMMIT;
     
    Commit completeSQL> ALTER SYSTEM FLUSH SHARED_POOL;
     
    System altered
     
    SQL> DESC T_TABLE;
    Name Type         Nullable Default Comments 
    ---- ------------ -------- ------- -------- 
    NAME VARCHAR2(11) Y                         
    AGE  NUMBER(3)    Y                         
    SEX  CHAR(1)      Y                         
     
    SQL> select column_name,column_id from user_tab_cols where table_name='T_TABLE';
     
    COLUMN_NAME                     COLUMN_ID
    ------------------------------ ----------
    NAME                                    1
    SEX                                     3
    AGE                                     2
     如果被交换位置的列有约束(包含非null约束),索引等,那么最好先删除这些东东再换位置。
      

  4.   

    没有必要在建表时一定要按Name Varchar2(11), Age Number(3), Sex Char(1) ,当你把数据表建好时,select 的时候就可以改变查询的结果了