如何刷新oracle中的物化视图

Sri*_*vas 53 oracle materialized-views

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

DBMS_MVIEW.REFRESH('v_materialized_foo_tbl')
Run Code Online (Sandbox Code Playgroud)

但是它抛出了无效的sql语句.

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

CREATE OR REPLACE 
PROCEDURE MAT_VIEW_FOO_TBL 
IS
BEGIN
   DBMS_MVIEW.REFRESH('v_materialized_foo_tbl')
END MAT_VIEW_FOO_TBL IS;
Run Code Online (Sandbox Code Playgroud)

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

MAT_VIEW_FOO_TBL;
Run Code Online (Sandbox Code Playgroud)

它再次抛出错误.

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

谢谢,Srinivas

Waq*_*Ali 53

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

BEGIN
DBMS_SNAPSHOT.REFRESH('Name here');
END;
Run Code Online (Sandbox Code Playgroud)

  • 如果您有架构,请使用以下“dbms_snapshot.refresh('schema.view');” (3认同)

小智 44

试试这个:

DBMS_SNAPSHOT.REFRESH( 'v_materialized_foo_tbl','f'); 
Run Code Online (Sandbox Code Playgroud)

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

  • 这在像SQL Developer这样的IDE中运行良好,但是如果你是从代码执行它(比如ODP.NET等......)那么它必须包含在BEGIN&END中,如@Waqas Ali建议的那样. (2认同)

Son*_*oul 12

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

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

EXECUTE DBMS_MVIEW.REFRESH(LIST=>'MV_MY_VIEW');
Run Code Online (Sandbox Code Playgroud)

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

EXECUTE DBMS_MVIEW.REFRESH(LIST=>'MV_MY_VIEW',PARALLELISM=>4);
Run Code Online (Sandbox Code Playgroud)

这实际上对我有用,添加并行选项加速了我的执行约2.5次.

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


小智 8

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

EXECUTE  
DBMS_SNAPSHOT.REFRESH('Materialized_VIEW_OWNER_NAME.Materialized_VIEW_NAME','COMPLETE');
Run Code Online (Sandbox Code Playgroud)


mik*_*ike 6

最好的选择是使用'?' 方法的参数。这样,DBMS_MVIEW将选择最佳的刷新方式,因此它将为您执行最快的刷新。,如果您确实需要完全刷新,而尝试使用诸如method =>'f'之类的方法,则不会失败。:-)

在SQL * Plus提示符下:

EXEC DBMS_MVIEW.REFRESH('my_schema.my_mview', method => '?');
Run Code Online (Sandbox Code Playgroud)


Wil*_*ett 5

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

CREATE OR REPLACE PROCEDURE "MAT_VIEW_FOO_TBL" AS 
BEGIN
  dbms_mview.refresh('v_materialized_foo_tbl');
END;
Run Code Online (Sandbox Code Playgroud)