Oracle怎么给表的特定位置增加字段

时间:2022-05-20 12:19:12
Oracle怎么给表的特定位置增加字段

原来的表:
Table T_Table
(
Name Varchar2(11),
Sex Char(1)
)
要变成
Table T_Table
(
Name Varchar2(11),
Age Number(3),
Sex Char(1)
)

的SQL语句?

6 个解决方案

#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 complete

SQL> 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


引用 3 楼 hyee 的回复:
需要sys用户才可以修改。例如: 

SQL code
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> 
S…

有点思路

#5


没必要的。你查询时变位置就行了。

#6


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

#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 complete

SQL> 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


引用 3 楼 hyee 的回复:
需要sys用户才可以修改。例如: 

SQL code
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> 
S…

有点思路

#5


没必要的。你查询时变位置就行了。

#6


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