如何刷新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
名称, 第二个参数定义refresh
types。 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');