|
本帖最后由 newkid 于 2012-5-11 04:04 编辑
2012-4-28 答案CE, 非常容易,就不解释了。
=======================================
2012-5-5 查询重写
作者:Valentin Nikotin
难度:高
我用SYS登录,创建了plch_trusted用户并赋予如下权限:
grant create session to plch_trusted identified by plch_trusted;
grant create materialized view to plch_trusted;
grant execute on sys.dbms_advanced_rewrite to plch_trusted;
然后我在HR模式下创建了如下的表,填入数据并为plch_trusted用户赋予权限:
create table hr.plch_table (id number);
insert into hr.plch_table values (1);
commit;
grant select, query rewrite on hr.plch_table to plch_trusted;
然后我用plch_trusted登录,开启查询重写,并且声明了一条重写规则,如下所示:
alter session set query_rewrite_integrity = trusted;
begin
sys.dbms_advanced_rewrite.declare_rewrite_equivalence
(
name => 'plch_rewrite',
source_stmt => 'select * from hr.plch_table',
destination_stmt => /* SOME QUERY */,
validate => false
);
end;
/
在同一个会话中我运行了针对HR的plch_table表的查询:
select * from hr.plch_table;
哪些选项是“可能”被显示的结果?(注:每个选项下面都说明了输出是几行几列)
(译者注:此处不太明白,应该是中间创建物化视图的步骤被忽略了,用户可以创建任意的物化视图,只要能让它输出预期结果又不破坏重写规则就可以)
(A)
1
(一行一列)
(B)
2
(一行一列)
(C)
A
(一行一列)
(D)
1 2
(一行两列)
(E)
1
2
3
(三行一列)
|
|