我尝试使用以下方法刷新物化视图:
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
尝试这个:
DBMS_SNAPSHOT.REFRESH( 'v_materialized_foo_tbl','f');
第一个参数是mat_view
的名称,第二个参数定义了refresh
的类型。 f表示快速刷新。但要记住这一点,它将覆盖任何其他刷新计时选项。
运行此脚本以刷新物化视图中的数据:
BEGIN
DBMS_SNAPSHOT.REFRESH('Name here');
END;
游戏有点晚了,但我找到了一种方法来使这个问题的原始语法工作(我在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');
最好的选择是使用'?'方法的论据。这样DBMS_MVIEW将选择最佳的刷新方式,因此它将为您进行最快的刷新。 ,如果您在实际需要完全刷新时尝试类似method =>'f'的内容,则不会失败。 :-)
从SQL * Plus提示符:
EXEC DBMS_MVIEW.REFRESH('my_schema.my_mview', method => '?');
如果您正在使用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;
希望以上有所帮助。
EXECUTE dbms_mview.refresh('view name','cf');
当我们必须使用内置程序或包时,我们必须使用“EXECUTE”命令然后它将工作。
EX:
EXECUTE exec DBMS_MVIEW.REFRESH('v_materialized_foo_tbl');