Without resolving to manually changing metadata tables, but using SQL, the following trick can be applied:
- Create a new table called "newtable" with the desired column order, based on "oldcolumn"
Note: generate DDL script for "oldtable" and only change the position of the columns. Do not apply constraints, defaults, primary keys, foreign keys, etc. They are named and the names cannot exists twice in a schema
- Insert all data from "oldtable" into "newtable" using a DML INSERT-statement
- Drop "oldtable"
- Rename "newtable" as "oldtable"
- Apply constraints, defaults, etc to "oldtable"
Note: if columns are deleted or newly added to "newtable", then this is not straightforward and each constraint, default, etc should be inspected before applying
Or you can use the "dbms_redefinition" package (bhaski on www.geekinterview.com):
But you should have these previleges -->
# execute access on the dbms_redefinition package
# create any table # alter any table
# drop any table
# lock any table
# select any table
create table tab1(col1 char,col3 number);
alter table tab1 add(col2 char);
create table tab2 as select col1,col2,col3 from tab1; exec
dbms_redefinition.can_redef_table('schema_name','tab1');
begin
dbms_redefinition.start_redef_table('schema_name','tab1','tab2','col1,col2,col3');
dbms_redefinition.finish_redef_table( 'schema_name', 'tab1', 'tab2' );
end;
select * from tab1;
col1 col2 col3
No comments:
Post a Comment