【发布时间】:2019-08-23 19:55:16
【问题描述】:
物化视图“MV_AMP”:
CREATE MATERIALIZED VIEW MV_AMP
NOLOGGING
BUILD IMMEDIATE
REFRESH FORCE
ON DEMAND
AS
Select a, b, c from amp;
依赖于“MV_AMP”的物化视图“MV_BOT”:
CREATE MATERIALIZED VIEW MV_BOT
NOLOGGING
BUILD IMMEDIATE
REFRESH FORCE
ON DEMAND
AS
SELECT bot.x, bot.y, mv_amp
FROM bot, mv_amp
WHERE bot.a = mv_amp.a;
并在 mv_bot 中创建唯一索引:
CREATE UNIQUE INDEX mv_bot_idx001 ON mv_bot(x, a);
视图和索引创建成功后,假设我添加了一个重复值,由于唯一索引刷新 mv_bot 时会导致 (dup_val_on_index) 之类的错误。
所以我在 MV_AMP(主视图)中使用 nested=TRUE 进行了刷新,Oracle 没有引发错误:
BEGIN
dbms_mview.refresh_dependent(number_of_failures => n_failures,
list => 'MV_AMP',
atomic_refresh => TRUE,
nested => TRUE);
EXCEPTION
WHEN
OTHERS THEN
-- it never reach this code
dbms_output.put_line('Errors: '||SQLERRM);
END;
n_failures 返回:0 并且它永远不会到达异常内部的 dbms_output。
当 oracle 尝试更新嵌套的 MV 并登录表时,我需要捕获错误。
使用 Oracle 11g。
【问题讨论】: