dbms_comparison.CREATE_COMPARISON takes a column list as input - you just need to supply a column list. this is easily built from the data dictionary.
ops$tkyte%ORA11GR2> create table t1 ( x int, y int, z int, creation_date date, update_date date, "USER" varchar2(30) );
Table created.
ops$tkyte%ORA11GR2> create table t2 ( a int, b int, c int, creation_date date, update_date date, "USER" varchar2(30) );
Table created.
ops$tkyte%ORA11GR2>
ops$tkyte%ORA11GR2> declare
2 procedure p( p_fmt in varchar2, p_str in varchar2 default null )
3 as
4 begin
5 dbms_output.put_line( replace( p_fmt, '%s', p_str ) );
6 end;
7 begin
8 for x in ( select table_name, listagg(column_name, ',' ) within group (order by column_id) clist
9 from user_tab_columns
10 where column_name not in ('CREATION_DATE', 'UPDATE_DATE', 'USER' )
11 group by table_name )
12 loop
13 p( q'|dbms_comparison.create_comparison( |' );
14 p( q'|comparison_name => '%s', |', x.table_name || '_cmp' );
15 p( q'|schema_name => '%s', |', user );
16 p( q'|object_name => '%s', |', x.table_name );
17 p( q'|.... other stuff....|' );
18 p( q'|column_list => '%s', |', x.clist );
19 p( q'|.... other stuff....|' );
20 p( q'|);|' );
21 end loop;
22 end;
23 /
dbms_comparison.create_comparison(
comparison_name => 'T1_cmp',
schema_name => 'OPS$TKYTE',
object_name => 'T1',
.... other stuff....
column_list => 'X,Y,Z',
.... other stuff....
);
dbms_comparison.create_comparison(
comparison_name => 'T2_cmp',
schema_name => 'OPS$TKYTE',
object_name => 'T2',
.... other stuff....
column_list => 'A,B,C',
.... other stuff....
);
PL/SQL procedure successfully completed.