lunes, 4 de junio de 2012

Script - Reescritura de Sentencias

Script para reescribir sentencias mediante el uso del paquete DBMS_ADVANCED_REWRITE.

exec sys.dbms_advanced_rewrite.drop_rewrite_equivalence('ejemplo');
exec sys.dbms_advanced_rewrite.declare_rewrite_equivalence ( -
name => 'ejemplo', -
source_stmt=> q'[select columna1, columna2 from tablaA where columna1 like 'ABCD%' ]', -
destination_stmt=> q'[select columna1, columna2 from tablaB where columna3 = 'ABCD' ]', -
validate       => false, -
rewrite_mode=>'TEXT_MATCH');

Vista donde podemos ver la equivalencia creada: DBA_REWRITE_EQUIVALENCES

ALTER SESSION SET QUERY_REWRITE_ENABLED=FORCE;
ALTER SESSION SET QUERY_REWRITE_INTEGRITY=TRUSTED;

Así cuando ejecutemos :

select columna1, columna2 from tablaA where columna1 like 'ABCD%'

Realmente se ejecutará:

select columna1, columna2 from tablaB where columna3 = 'ABCD'

Útil para situaciones en las que no se puede modificar el código de la aplicación, y el resto de opciones no fuciona (SQL_profiles, hints, parámetros, etc).

IMPORTANTE: No admite el uso de variables BIND, por lo que su ámbito de actuación está limitado a sentencias que no hacen uso de variables bind.


No hay comentarios:

Publicar un comentario