【dbms包】DBMS_ADVANCED_REWRITE

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/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/16179598/viewspace-722207/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值