最先答对且答案未经编辑的puber将获得纪念章一枚(答案不可编辑但可发新贴补充或纠正),其他会员如果提供有价值的分析、讨论也可获得纪念章一枚。
每两周的优胜者可获得itpub奖励的技术图书一本。
以往旧题索引:
http://www.itpub.net/forum.php?m ... eid&typeid=1808
原始出处:
http://www.plsqlchallenge.com/
作者:Chris Saxon
运行环境:SQLPLUS, SERVEROUTPUT已打开
注:本题给出答案时候要求给予简要说明才能得到奖品
你的应用在如下的表存储订单信息。它有一个汇总物化视图来帮助产生报表:
create table qz_orders (
order_id integer not null primary key,
customer_id integer not null,
order_datetime date not null
);
create materialized view log on qz_orders
with rowid, sequence ( order_datetime ) including new values ;
create materialized view qz_order_mv
refresh fast as
select trunc ( order_datetime ) dt, count (*) ct
from qz_orders
group by trunc ( order_datetime );
作为测试过程的一部分,你向qz_orders表加入了新数据,如下:
insert into qz_orders
with rws as (
select level x from dual
connect by level <= 1000
)
select rownum, mod ( rownum, 131 ), sysdate + ( rownum / 24 )
from rws;
commit;
exec dbms_mview.refresh ( 'qz_order_mv', 'C' );
随后又删除了它们。在这个过程中,你也需要重置这个MV。哪些选项让你可以在上述的INSERT之后执行,从而:
删除qz_orders的所有行,并且刷新MV?
在正确的选项执行之后,这个查询:
select count (*) from qz_order_mv;
应该返回如下输出:
COUNT(*)
----------
0
(A)
delete qz_orders;
commit;
exec dbms_mview.refresh ( 'qz_order_mv', 'F' );
(B)
delete qz_orders;
commit;
exec dbms_mview.refresh ( 'qz_order_mv', 'C' );
(C)
truncate table qz_orders;
exec dbms_mview.refresh ( 'qz_order_mv', 'F' );
(D)
truncate table qz_orders;
exec dbms_mview.refresh ( 'qz_order_mv', 'C' );
(E)
truncate table qz_orders;
exec dbms_mview.refresh ( 'qz_order_mv', '?' );