J'essaie de rafraîchir la vue matérialisée en utilisant:
DBMS_MVIEW.REFRESH('v_materialized_foo_tbl')
Mais il jette l'instruction SQL invalide.
Ensuite, j'ai créé une procédure stockée comme ceci:
CREATE OR REPLACE
PROCEDURE MAT_VIEW_FOO_TBL
IS
BEGIN
DBMS_MVIEW.REFRESH('v_materialized_foo_tbl')
END MAT_VIEW_FOO_TBL IS;
Cette procédure a été créée avec succès, mais lorsque j'appelle cette procédure avec
MAT_VIEW_FOO_TBL;
ça jette encore une erreur.
Veuillez suggérer une solution à ce problème.
Merci, Srinivas
essaye ça:
DBMS_SNAPSHOT.REFRESH( 'v_materialized_foo_tbl','f');
first paramètre est le nom de mat_view
et second définit le type de refresh
. f désigne une actualisation rapide . Mais gardez à l’esprit ce qui suit/- annulera toutes les autres options de synchronisation d’actualisation.
Exécutez ce script pour actualiser les données en vue matérialisée:
BEGIN
DBMS_SNAPSHOT.REFRESH('Name here');
END;
un peu tard dans le jeu, mais j'ai trouvé un moyen de faire fonctionner la syntaxe originale de cette question (je suis sur Oracle 11g)
** premier passage au schéma de votre MV **
EXECUTE DBMS_MVIEW.REFRESH(LIST=>'MV_MY_VIEW');
alternativement, vous pouvez ajouter quelques options:
EXECUTE DBMS_MVIEW.REFRESH(LIST=>'MV_MY_VIEW',PARALLELISM=>4);
cela fonctionne réellement pour moi, et l'ajout de l'option de parallélisme a accéléré mon exécution environ 2,5 fois.
Plus d'informations ici: Comment actualiser une vue matérialisée en parallèle
Vous pouvez actualiser complètement une vue matérialisée comme suit:
EXECUTE
DBMS_SNAPSHOT.REFRESH('Materialized_VIEW_OWNER_NAME.Materialized_VIEW_NAME','COMPLETE');
La meilleure option est d'utiliser le '?' argument pour la méthode. De cette manière, DBMS_MVIEW choisira la meilleure méthode d’actualisation afin que l’actualisation soit la plus rapide possible. et n'échouera pas si vous essayez quelque chose comme méthode => 'f' alors que vous avez réellement besoin d'un rafraîchissement complet. :-)
à partir de l'invite SQL * Plus:
EXEC DBMS_MVIEW.REFRESH('my_schema.my_mview', method => '?');
Si vous travaillez avec SQL Developer, vous devez mettre dbms_view en minuscule. Le reste a été bien compilé pour moi bien que je n’ai pas encore appelé la procédure à partir du code.
CREATE OR REPLACE PROCEDURE "MAT_VIEW_FOO_TBL" AS
BEGIN
dbms_mview.refresh('v_materialized_foo_tbl');
END;
Essayez d'utiliser la syntaxe ci-dessous:
Syntaxe commune:
begin
dbms_mview.refresh('mview_name');
end;
Exemple:
begin
dbms_mview.refresh('inv_trans');
end;
J'espère que ce qui précède aide.
EXECUTE dbms_mview.refresh ('nom de la vue', 'cf');