Oracle:如何使用DBMS_REDEFINITION包重新排序列?

时间:2013-07-06 01:21:43

标签: oracle dbms-redefinition

我需要使用DBMS_REDEFINITION包对表中的某些列重新排序。如何为

等表格执行此操作
create table a (z number, x number);

这样重新排序的表有x作为第一列?

(上下文:我正在编写一些实用程序,它们将一些元数据列添加到某些现有表中,如果元数据列位于前面,它将对所有相关人员有用,因此在sql中提取它们时可以方便地查看它们开发人员或其他表浏览工具。我知道有关逻辑处理列顺序无关紧要的论点,但这是为了使用现成的工具使表更易于理解。)

2 个答案:

答案 0 :(得分:1)

不确定您的问题是什么,因为手册中解释了用法。

但是由于你的表似乎没有主键(或者你忘了提到它),你需要使用特殊标志才能使用dbms_redefinition重新定义它:

create table a_ (x number, z number);

begin
  dbms_redefinition.start_redef_table(
    uname => user, 
    orig_table => 'A', 
    int_table => 'A_', 
    options_flag => dbms_redefinition.cons_use_rowid);

  dbms_redefinition.finish_redef_table(
    uname => user, 
    orig_table => 'A', 
    int_table => 'A_');
end;
/

drop table a_;

答案 1 :(得分:0)

抱歉,我还不能评论你的问题,
那么重命名+创建为选择呢?

alter table a rename to a_01;
create a as select x,z from a_01;

???