Search notes:

DBMS_COMPARISON.CONVERGE

create table tq84_tab_1 (id integer primary key, num number, txt varchar2(20));
create table tq84_tab_2 (id integer primary key, num number, txt varchar2(20));


begin
   dbms_comparison.create_comparison(
      comparison_name    => 'tq84_tab_1_vs_tq84_tab_2',
      schema_name        =>  user             ,
      object_name        => 'tq84_tab_1'      ,
      dblink_name        =>  null             ,
      remote_schema_name =>  user             ,
      remote_object_name => 'tq84_tab_2'
--    column_list        => 'num,txt'
   );
end;
/


begin
insert into tq84_tab_1 values(1,    8, 'eight');
insert into tq84_tab_1 values(2,    4, 'four' );
insert into tq84_tab_1 values(3,    7, 'seven');
insert into tq84_tab_1 values(4, null, 'null' );
insert into tq84_tab_1 values(5,    0,  null  );
insert into tq84_tab_1 values(6,    9, 'nine' );
insert into tq84_tab_1 values(7,    3, 'three');

--
-- Most records are unchaged in tq84_tab_2 ...
--
insert into tq84_tab_2 select * from tq84_tab_1;

--
-- ... but there ARE some changes:
--
delete from tq84_tab_1 where id = 2;
insert into tq84_tab_1 values (9,    2, 'two');

update tq84_tab_1 set txt = 'NINE' where num = 9;

insert into tq84_tab_2 values (8,    3, 'three');

commit;
end;
/

-- select * from tq84_tab_2;


declare
   comp_info dbms_comparison.comparison_type;
   equal     boolean;
begin
   equal := dbms_comparison.compare(
      comparison_name    => 'tq84_tab_1_vs_tq84_tab_2',
      scan_info          =>  comp_info        ,   /* out parameter */
      perform_row_dif    =>  true
   );

   if equal then
      dbms_output.put_line('data is equal');
   else
      dbms_output.put_line('data is different');
      dbms_output.put_line('  scan id:             ' || comp_info.scan_id);

      dbms_comparison.converge(
         comparison_name    => 'tq84_tab_1_vs_tq84_tab_2',
         scan_id            => comp_info.scan_id,
         scan_info          => comp_info,
         converge_options   => dbms_comparison.cmp_converge_local_wins
      );
   
      dbms_output.put_line('  local rows merged:   ' || comp_info.loc_rows_merged );
      dbms_output.put_line('  remote rows merged:  ' || comp_info.rmt_rows_merged );
      dbms_output.put_line('  local rows deleted:  ' || comp_info.loc_rows_deleted);
      dbms_output.put_line('  remote rows deleted: ' || comp_info.rmt_rows_deleted);

   end if;
end;
/

select * from tq84_tab_1;
select * from tq84_tab_2;


begin
   dbms_comparison.drop_comparison('tq84_tab_1_vs_tq84_tab_2');
end;
/

drop table tq84_tab_1;
drop table tq84_tab_2;

See also

dbms_comparison

Index