【发布时间】:2015-05-21 14:45:55
【问题描述】:
create or replace TRIGGER REFRESH_REST_VIEW
AFTER
INSERT OR UPDATE
ON tbl_contract
BEGIN
execute DBMS_MVIEW.REFRESH('REST_VIEW');
END REFRESH_REST_VIEW;
commit;
这是我用来刷新实体化视图的 sql 触发器。但它说..
Warning: execution completed with warning
TRIGGER REFRESH_REST_VIEW Compiled.
附: : 当表(实体化视图使用)的数据进行任何DML操作时,触发器将被执行。
我已经用谷歌搜索了很多,很多帖子说这是可能的,但我不知道该怎么做。我尝试使用常规触发器语法,但它不起作用。
更新:
现在我正在尝试对过程和触发器进行相同的操作..
create or replace
PROCEDURE Rfresh_mate_views AS
BEGIN
DBMS_MVIEW.REFRESH('REST_VIEW');
END Rfresh_mate_views;
create or replace trigger refresh_company_mview
after insert or update ON BCD.BCD_COMPANY
begin
RFRESH_MATE_VIEWS();
end refresh_company_mview;
所有都已成功编译,但在更新表格时显示:
ORA-04092: cannot COMMIT in a trigger
ORA-06512: at "SYS.DBMS_SNAPSHOT", line 2449
ORA-06512: at "SYS.DBMS_SNAPSHOT", line 2429
ORA-06512: at "BCD.RFRESH_MATE_VIEWS", line 3
ORA-06512: at "BCD.REFRESH_COMPANY_MVIEW", line 2
ORA-04088: error during execution of trigger 'BCD.REFRESH_COMPANY_MVIEW'
【问题讨论】:
-
为什么要在触发器中执行此操作?为什么不将物化视图声明为
REFRESH FAST ON COMMIT,让Oracle在事务提交时自动刷新物化视图? -
谢谢 Cave,我试过了,它说.. SQL 错误:ORA-12054:无法为物化视图 12054 设置 ON COMMIT 刷新属性。00000 -“无法为物化视图” *原因:物化视图在提交时不满足刷新条件。 *操作:仅指定有效选项。
标签: sql oracle triggers oracle10g materialized-views