Search notes:

Oracle: DBMS_ADVANCED_REWRITE

Procedures

alter_rewrite_equivalence
build_safe_rewrite_equivalence
declare_rewrite_equivalence
drop_rewrite_equivalence
validate_rewrite_equivalence

Simple example

The user of the functionality of dbms_advanced_rewrite needs to have two privileges. These cannot, obviously, be granted by the user receiving them:
connect / as sysdba

grant execute on dbms_advanced_rewrite to rene;
grant create materialized view         to rene;
Github repository oracle-patterns, path: /Installed/dbms/advanced_rewrite/intro/grant.sql
Then, the user that received the privileges, creates a table and inserts some data …
create table tq84_rewrite_tab_1 (
   num number,
   txt varchar2(20)
);

insert into tq84_rewrite_tab_1 values (1, 'one'  );
insert into tq84_rewrite_tab_1 values (2, 'two'  );
insert into tq84_rewrite_tab_1 values (3, 'three');
insert into tq84_rewrite_tab_1 values (4, 'four' );
insert into tq84_rewrite_tab_1 values (5, 'five' );

commit;
Github repository oracle-patterns, path: /Installed/dbms/advanced_rewrite/intro/table-1.sql
… creates a rewrite equivalency
begin

   sys.dbms_advanced_rewrite.declare_rewrite_equivalence (
      name             => 'return_twice_the_num',
      source_stmt      => 'select   num, txt from tq84_rewrite_tab_1',
      destination_stmt => 'select 2*num, txt from tq84_rewrite_tab_1',
      validate         =>  false,
      rewrite_mode     => 'general'
   );

end;
/
Github repository oracle-patterns, path: /Installed/dbms/advanced_rewrite/intro/equivalence-1.sql
… and selects from the table on which the equivaleny was defined:
alter system set query_rewrite_integrity=trusted  scope=memory;
alter system set query_rewrite_enabled  =force    scope=memory;

select
   txt,
   num
from
   tq84_rewrite_tab_1;

select
   txt,
   num / 2 as num
from
   tq84_rewrite_tab_1;
Github repository oracle-patterns, path: /Installed/dbms/advanced_rewrite/intro/select-1.sql
Cleaning up
begin
   sys.dbms_advanced_rewrite.drop_rewrite_equivalence('return_twice_the_num');
end;
/

drop table tq84_rewrite_tab_1;

See also

Defined rewrite equivalences can be queried from the data dictionary views dba_rewrite_equivalences etc.
dbms_sql_translator
Oracle DBMS PL/SQL packages

Index