Cela ressemble au package DBMS_ADVANCED_REWRITE . Tim Hall a une excellente procédure d'utilisation de ce package pour pointer les requêtes d'une application sur une table ou une vue différente .
Si vous souhaitez simplement modifier le plan de requête mais ne pas pointer la requête vers une autre table, vous pouvez utiliser des plans stockés ou des profils SQL.
Par exemple, j'ai des tables FOO
avec 1 ligne et BAR
2 lignes
SQL> select * from foo;
COL1
----------
1
SQL> select * from bar;
COL1
----------
66
77
Je peux déclarer une équivalence de réécriture en disant que les requêtes contre FOO
devraient plutôt frapperBAR
begin
sys.DBMS_ADVANCED_REWRITE.DECLARE_REWRITE_EQUIVALENCE(
'Rewrite_Foo',
'select col1 from foo',
'select col1 from bar',
false,
'TEXT_MATCH' );
end;
Maintenant, si je mets query_rewrite_integrity
à confiance, les requêtes contre FOO
finissent par frapper une table complètement différente.
SQL> alter session set query_rewrite_integrity=trusted;
Session altered.
SQL> select * from foo;
COL1
----------
66
77
Cela peut créer des plans de requête plutôt intéressants où l'objet que vous interrogez est introuvable dans le plan
SQL> select * from foo;
COL1
----------
66
77
Execution Plan
----------------------------------------------------------
Plan hash value: 4224476444
--------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
--------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 2 | 26 | 3 (0)| 00:00:01 |
| 1 | TABLE ACCESS FULL| BAR | 2 | 26 | 3 (0)| 00:00:01 |
--------------------------------------------------------------------------
Note
-----
- dynamic sampling used for this statement (level=2)
Statistics
----------------------------------------------------------
0 recursive calls
0 db block gets
7 consistent gets
0 physical reads
0 redo size
584 bytes sent via SQL*Net to client
523 bytes received via SQL*Net from client
2 SQL*Net roundtrips to/from client
0 sorts (memory)
0 sorts (disk)
2 rows processed