有没有更简单的方法可以在同一张表上互相交换列名?

时间:2018-09-20 13:09:46

标签: oracle ddl

我需要找到一种在Oracle表中相互交换2个列名的方法。

我可以做到的一种方法是:

ALTER TABLE SCHEMANAME.TABLENAME
RENAME COLUMN FIRST TO X;

ALTER TABLE SCHEMANAME.TABLENAME
RENAME COLUMN SECOND TO Y;

ALTER TABLE SCHEMANAME.TABLENAME
RENAME COLUMN X TO SECOND;

ALTER TABLE SCHEMANAME.TABLENAME
RENAME COLUMN Y TO FIRST;

是否有更简单的方法来完成此操作?

1 个答案:

答案 0 :(得分:0)

对于http://www.dba-oracle.com/t_change_column_order_within_oracle_table.htm,您不能。

  

可以更改列在数据块上的存储顺序,但这是一项学术练习,因为它没有任何区别

是一样的 代表variables,但不能使用XOR swap technique ;)

必须为3条语句:

ALTER TABLE SCHEMANAME.TABLENAME RENAME COLUMN FIRST TO SWAPING_COL ;

ALTER TABLE SCHEMANAME.TABLENAME RENAME COLUMN SECOND TO FIRST ;

ALTER TABLE SCHEMANAME.TABLENAME RENAME COLUMN SWAPING_COL TO FIRST ;

另一种解决方案是按照您喜欢的顺序创建一个新表:

create table newtab
as   select SECOND, FIRST from SCHEMANAME.TABLENAME ;

  rename SCHEMANAME.TABLENAME  to TABLENAMEoldtab ; -- or drop it
  rename newtab to SCHEMANAME.TABLENAME ;