如何刷新oracle中的物化视图

Iam尝试使用以下命令刷新物化视图:

DBMS_MVIEW.REFRESH('v_materialized_foo_tbl') 

但它是抛出无效的SQL语句。

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

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

这个程序已经成功创build,但是当我用这个程序调用

 MAT_VIEW_FOO_TBL; 

它再次抛出一个错误。

请为此提出解决scheme。

谢谢,Srinivas

尝试这个:

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

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

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

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

有点迟到游戏,但我find了一个方法来使这个问题的原始语法工作(我在Oracle 11g)

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

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

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

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

这实际上适用于我,添加并行选项大约2.5倍的执行速度。

更多信息在这里: 如何并行刷新物化视图

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

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

如果您正在使用SQL Developer,则必须将dbms_view放在小写字母中。 剩下的编译好了,虽然我还没有从代码中调用过程。

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

尝试使用下面的语法:

常用语法:

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

例:

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

希望以上的帮助。

最好的select是使用'?' 争论的方法。 这样DBMS_MVIEW将会select最好的刷新方式,所以它会为你做最快的刷新。 ,如果你真的需要一个完整的刷新,如果你尝试类似于method =>'f'的方法,将不会失败。 🙂

从SQL * Plus提示:

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

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

EX:

EXECUTE exec DBMS_MVIEW.REFRESH('v_materialized_foo_tbl');