-4

我创建了一个有 4 列的表。我需要更改表的结构。我需要永久交换第 4 列和第 2 列的位置。这在甲骨文中可能吗?

4

5 回答 5

5

不可能。看到这个

Oracle 只允许将列添加到现有表的末尾。

因此,您必须删除并重新创建表。

于 2013-03-14T14:27:31.070 回答
3

您可以运行这样的脚本:

CREATE TABLE TMP_TBL as SELECT * FROM TBL_ORIG;
ALTER TABLE TBL_ORIG ADD COLUMN COL3;
DROP TABLE TBL_ORIG;
CREATE TABLE TBL_ORIG AS SELECT COL1, COL3, COL2 FROM TMP_TBL;
DROP TABLE TMP_TBL

您需要考虑索引以及存储问题。

于 2013-03-14T15:08:54.367 回答
2

col1 和 col2 列的交换
假设 col1 是intcol2 是varchar2(20)

-- drop all indexes and constraints concerning col1 and col2
alter table your_table add temp_col int;          -- type of col1
update your_table set col1 = null, temp_col = col1;
alter table your_table modify col1 varchar2(20);  -- type of col2
update your_table set col2 = null, col1 = col2;
alter table your_table modify col2 int;           -- type of col1
update your_table set col2 = temp_col;
alter table your_table drop column temp_col;
alter table your_table rename column col1 to temp_col;
alter table your_table rename column col2 to col1;
alter table your_table rename column temp_col to col1;  
-- recreate indexes and constraints
于 2013-03-14T15:31:57.627 回答
2

如果它们是相同的数据类型,只需重命名表列。如果不是,那么 Alter - 请参阅 Sean 和 Egor 示例。

重命名: http: //docs.oracle.com/cd/E11882_01/server.112/e25494/tables006.htm#ADMIN11662

在采访中,他们正在寻找肖恩的答案。仅供参考...

于 2013-03-14T15:55:09.993 回答
2

为什么在这个世界上这是必要的?列顺序在 SQL 中没有任何意义。

于 2013-03-14T15:14:39.893 回答