ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 【dbms包】DBMS_ADVANCED_REWRITE

【dbms包】DBMS_ADVANCED_REWRITE

原创 Linux操作系统 作者:yellowlee 时间:2012-04-25 14:56:33 0 删除 编辑

DBMS_ADVANCED_REWRITE

 

使用这个包之前需要赋予权限:

grant execute on DBMS_ADVANCED_REWRITE to test;

grant create MATERIALIZED VIEW TO test;

 

sys用户不允许查询重写(?)

 

test用户下操作:

测试sys.dbms_advanced_rewrite.declare_rewrite_equivalence

 

Create table t_test_a(col1 varchar2(10));

Insert into t_test_a values ('A');

 

create table t_test_b(col1 varchar2(10));

insert into t_test_b values('B');

 

commit;

 

SQL> variable B1 varchar2(1)

SQL> exec :B1 := 'A';

 

PL/SQL procedure successfully completed

B1

---------

A

SQL> SELECT col1 FROM t_test_a WHERE col1 = :B1;

 

COL1

----------

A

B1

---------

A

 

SQL>

 

修改两个查询重写的参数:

SQL> alter session set query_rewrite_enabled=TRUE;

 

Session altered

 

SQL>

 

SQL> alter session set query_rewrite_integrity=TRUSTED;

 

Session altered

 

SQL>

 

执行查询重写的过程:

SQL>

SQL> begin

  2  sys.dbms_advanced_rewrite.declare_rewrite_equivalence(

  3  name => 'DUMMY2',

  4  source_stmt => 'SELECT col1 FROM t_test_a',

  5  destination_stmt => 'SELECT col1 FROM t_test_b',

  6  validate => FALSE,

  7  rewrite_mode => 'GENERAL'

  8  );

  9  end;

 10  /

 

PL/SQL procedure successfully completed

 

使用原sql查询,则被重写为了t_test_b,故而结果集没有行:

SQL> SELECT col1 FROM t_test_a WHERE col1 = :B1;

 

COL1

----------

B1

---------

A

 

SQL>


 

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/16179598/viewspace-722207/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2008-12-27

  • 博文量
    316
  • 访问量
    655159