复制/保存SQL中旧索引的表

复制/保存SQL中旧索引的表,sql,oracle,indexing,oracle-sqldeveloper,Sql,Oracle,Indexing,Oracle Sqldeveloper,我的模式中有两个表。表1是旧的,表2是新的,现在我希望以某种方式将表2复制/重命名为表1。同时,我希望在重命名/复制后保留旧表-->Table1中的索引 我正在使用SQLDeveloper来实现这一点。我希望我已经清楚地解释了我的疑问 如果我删除表1,我将丢失索引 在表2被删除之前,我无法将其重命名为表1 我看不到在sql developer上复制索引的选项 这一系列步骤怎么样 -- original table create table table2 (x number); create

我的模式中有两个表。表1是旧的,表2是新的,现在我希望以某种方式将表2复制/重命名为表1。同时,我希望在重命名/复制后保留旧表-->Table1中的索引

我正在使用SQLDeveloper来实现这一点。我希望我已经清楚地解释了我的疑问

  • 如果我删除表1,我将丢失索引
  • 在表2被删除之前,我无法将其重命名为表1
  • 我看不到在sql developer上复制索引的选项

  • 这一系列步骤怎么样

    -- original table
    create table table2 
    (x number);
    
    create index table2_idx on table2(x);
    
    
    -- now create the copy table
    create table table1
    as
    select * from table2;
    
    -- create new index
    create index table1_idx on table1(x);
    
    -- now switch 
    drop table table2;
    rename table1 to table2;
    
    替换您自己的索引定义和名称


    您可以在表概览选项卡的索引
    DDL
    中找到它
    SQL
    截断
    表1
    并重新插入数据:

    truncate table table1;
    
    insert into table1 ( . . . )
        select . . .
        from table2;
    
    如果两个表具有相同顺序的相同列,则可以在不列出列的情况下执行插入:

    insert into table1
        select *
        from table2;
    

    只需在表2上创建两个索引,并在删除表1后根据需要重命名即可。索引是从表中的数据生成的;你不能把他们抬到另一张桌子上;您需要为新表重新生成它们。提取DDL以创建索引,并在重命名/复制的表上运行它们2…为什么不能重新创建索引?或者简单地将数据从t2复制到t1?您的主要目标是什么?是否要重新组织该表?