我需要使用DBMS_REDEFINITION包对表中的某些列重新排序。如何为
等表格执行此操作create table a (z number, x number);
这样重新排序的表有x作为第一列?
(上下文:我正在编写一些实用程序,它们将一些元数据列添加到某些现有表中,如果元数据列位于前面,它将对所有相关人员有用,因此在sql中提取它们时可以方便地查看它们开发人员或其他表浏览工具。我知道有关逻辑处理列顺序无关紧要的论点,但这是为了使用现成的工具使表更易于理解。)
答案 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;
???