栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如何使用触发器刷新实例化视图?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何使用触发器刷新实例化视图?

在触发器中刷新实例化视图没有任何意义。

您可以通过删除单词来解决语法错误

EXECUTE

create or replace TRIGGER REFRESH_REST_VIEW AFTER  INSERT OR UPDATE ON tbl_contractBEGIN    DBMS_MVIEW.REFRESH('REST_VIEW');END REFRESH_REST_VIEW;

那将导致触发器被编译。但是,当您尝试执行

INSERT
UPDATE
反对时
tbl_contract
,您将得到一个运行时错误,不允许您在触发器中提交,因为刷新实例化视图会隐式提交,并且您无法在触发器内部提交。

SQL> create table foo( col1 number );Table created.SQL> create materialized view mv_foo  2  as  3  select *  4    from foo;Materialized view created.SQL> create trigger trg_foo  2    after insert or update on foo  3  begin  4    dbms_mview.refresh( 'MV_FOO' );  5  end;  6  /Trigger created.SQL> insert into foo values( 1 );insert into foo values( 1 ) *ERROR at line 1:ORA-04092: cannot COMMIT in a triggerORA-06512: at "SYS.DBMS_SNAPSHOT", line 2760ORA-06512: at "SYS.DBMS_SNAPSHOT", line 2740ORA-06512: at "SCOTT.TRG_FOO", line 2ORA-04088: error during execution of trigger 'SCOTT.TRG_FOO'

您可能会尝试通过破坏事务完整性并在自主事务中进行刷新来解决此问题。这样可以消除ORA-04092错误,但是物化视图不会包含作为事务的一部分插入或更新的未提交数据,该事务首先触发了触发器,从而破坏了刷新物化视图的整个目的。

正确的方法不是一开始就使用触发器。正确的方法是定义实例化视图以在commit–时刷新自身

REFRESH FAST ONCOMMIT
。由于出现错误,您无法在实例
ONCOMMIT
化视图上设置属性,因此,您需要查看《数据仓库指南》中列出的对快速刷新的限制,并确保您的实例化视图应可快速刷新。然后,您可以使用dbms_mview.explain_mview过程来告诉您,为何物化视图不符合提交时增量刷新的条件。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/392570.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号