3

我需要使用DBMS_REDEFINITION包对表中的某些列进行重新排序。我该如何为表格执行此操作,例如

create table a (z number, x number);

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

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

4

2 回答 2

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_;
于 2013-07-07T06:37:49.880 回答
0

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

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

???

于 2013-07-06T23:24:03.563 回答