原来的表:
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 语句决定它的先后顺序
除非你在企业管理器里操作,或者先把原表删除再建新表
字段的顺序在哪里都是无所谓的,使用时可以用select 语句决定它的先后顺序
#2
alter table T_Table
add Age Number(3);
add Age Number(3);
#3
需要sys用户才可以修改。例如:
如果被交换位置的列有约束(包含非null约束),索引等,那么最好先删除这些东东再换位置。
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
有点思路
#5
没必要的。你查询时变位置就行了。
#6
没有必要在建表时一定要按Name Varchar2(11), Age Number(3), Sex Char(1) ,当你把数据表建好时,select 的时候就可以改变查询的结果了
#1
在两个字段之间加新字段,用sql语句是实现不了的
除非你在企业管理器里操作,或者先把原表删除再建新表
字段的顺序在哪里都是无所谓的,使用时可以用select 语句决定它的先后顺序
除非你在企业管理器里操作,或者先把原表删除再建新表
字段的顺序在哪里都是无所谓的,使用时可以用select 语句决定它的先后顺序
#2
alter table T_Table
add Age Number(3);
add Age Number(3);
#3
需要sys用户才可以修改。例如:
如果被交换位置的列有约束(包含非null约束),索引等,那么最好先删除这些东东再换位置。
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
有点思路
#5
没必要的。你查询时变位置就行了。
#6
没有必要在建表时一定要按Name Varchar2(11), Age Number(3), Sex Char(1) ,当你把数据表建好时,select 的时候就可以改变查询的结果了