63

我正在尝试使用以下方法刷新物化视图:

DBMS_MVIEW.REFRESH('v_materialized_foo_tbl')

但它抛出了无效的 sql 语句。

然后我创建了一个这样的存储过程:

CREATE OR REPLACE 
PROCEDURE MAT_VIEW_FOO_TBL 
IS
BEGIN
   DBMS_MVIEW.REFRESH('v_materialized_foo_tbl')
END MAT_VIEW_FOO_TBL IS;

此过程已成功创建,但是当我调用此过程时

MAT_VIEW_FOO_TBL;

它再次抛出错误。

请为此问题提出解决方案。

谢谢, 斯里尼瓦斯

4

9 回答 9

62

运行此脚本以刷新物化视图中的数据:

BEGIN
DBMS_SNAPSHOT.REFRESH('Name here');
END;
于 2013-01-22T07:26:32.237 回答
52

试试这个:

DBMS_SNAPSHOT.REFRESH( 'v_materialized_foo_tbl','f'); 

第一个参数是名称,mat_view第二定义类型refreshf表示快速刷新。但请记住这一点,它将覆盖任何其他刷新时间选项。

于 2012-12-19T04:50:56.713 回答
14

游戏有点晚了,但我找到了一种方法可以使这个问题中的原始语法起作用(我在 Oracle 11g 上)

** 首先切换到您的 MV 架构 **

EXECUTE DBMS_MVIEW.REFRESH(LIST=>'MV_MY_VIEW');

或者,您可以添加一些选项:

EXECUTE DBMS_MVIEW.REFRESH(LIST=>'MV_MY_VIEW',PARALLELISM=>4);

这实际上对我有用,并且添加并行选项将我的执行速度提高了大约 2.5 倍。

此处的更多信息:如何并行刷新物化视图

于 2014-10-06T22:57:03.637 回答
8

您可以按如下方式完全刷新物化视图:

EXECUTE  
DBMS_SNAPSHOT.REFRESH('Materialized_VIEW_OWNER_NAME.Materialized_VIEW_NAME','COMPLETE');
于 2015-01-20T07:39:22.863 回答
8

最好的选择是使用“?” 方法的论据。这样 DBMS_MVIEW 会选择最好的刷新方式,所以它会为你做最快的刷新。,并且如果您在实际需要完全刷新时尝试类似 method=>'f' 之类的方法,则不会失败。:-)

从 SQL*Plus 提示符:

EXEC DBMS_MVIEW.REFRESH('my_schema.my_mview', method => '?');
于 2016-09-02T23:21:51.137 回答
5

如果您使用 SQL Developer,则必须将 dbms_view 设为小写。其余的对我来说编译得很好,尽管我还没有从代码中调用这个过程。

CREATE OR REPLACE PROCEDURE "MAT_VIEW_FOO_TBL" AS 
BEGIN
  dbms_mview.refresh('v_materialized_foo_tbl');
END;
于 2014-07-14T14:17:36.293 回答
1

尝试使用以下语法:

常用语法:

begin
dbms_mview.refresh('mview_name');
end;

例子:

begin
dbms_mview.refresh('inv_trans');
end;

希望以上有所帮助。

于 2016-04-11T01:10:05.047 回答
1

EXECUTE dbms_mview.refresh('视图名称','cf');

于 2019-02-14T09:45:13.660 回答
-1

当我们必须使用内置程序或包时,我们必须使用“EXECUTE”命令,然后它就会起作用。

前任:

执行 exec DBMS_MVIEW.REFRESH('v_materialized_foo_tbl');

于 2017-02-09T06:51:43.293 回答