如何刷新oracle中的物化视图

时间:2012-07-19 06:10:15

标签: oracle materialized-views

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

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;

再次抛出错误。

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

谢谢, SRINIVAS

9 个答案:

答案 0 :(得分:52)

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

BEGIN
DBMS_SNAPSHOT.REFRESH('Name here');
END;

答案 1 :(得分:44)

试试这个:

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

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

答案 2 :(得分:11)

游戏有点晚了,但是我发现了一种方法可以使这个问题的原始语法有效(我在Oracle 11g上)

**首先切换到MV **的模式

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

或者你可以添加一些选项:

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

这实际上适合我,并且添加并行选项加快了我执行约2.5次。

此处有更多信息:How to Refresh a Materialized View in Parallel

答案 3 :(得分:7)

您可以完全刷新物化视图,如下所示:

EXECUTE  
DBMS_SNAPSHOT.REFRESH('Materialized_VIEW_OWNER_NAME.Materialized_VIEW_NAME','COMPLETE');

答案 4 :(得分:5)

最好的选择是使用'?'方法的论据。这样DBMS_MVIEW将选择最佳的刷新方式,因此它可以为您做最快的刷新。如果你尝试类似方法=>' f'当你真的需要一个完整的刷新。 : - )

来自SQL * Plus提示符:

EXEC DBMS_MVIEW.REFRESH('my_schema.my_mview', method => '?');

答案 5 :(得分:4)

如果您正在使用SQL Developer,则必须将dbms_view设置为小写。其余的编译对我来说很好,虽然我还没有从代码调用过程。

CREATE OR REPLACE PROCEDURE "MAT_VIEW_FOO_TBL" AS 
BEGIN
  dbms_mview.refresh('v_materialized_foo_tbl');
END;

答案 6 :(得分:1)

尝试使用以下语法:

通用语法:

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

示例:

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

希望以上有所帮助。

答案 7 :(得分:0)

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

答案 8 :(得分:-1)

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

EX:

EXECUTE exec DBMS_MVIEW.REFRESH('v_materialized_foo_tbl');