web-dev-qa-db-fra.com

Comment rafraîchir une vue matérialisée dans Oracle

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

51
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.

43
fahim ashraf

Exécutez ce script pour actualiser les données en vue matérialisée:

BEGIN
DBMS_SNAPSHOT.REFRESH('Name here');
END;
51
Waqas Ali

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

10
Sonic Soul

Vous pouvez actualiser complètement une vue matérialisée comme suit:

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

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 => '?');
4
mike

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;
3
Will Lovett

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.

1
Vikash Prasad

EXECUTE dbms_mview.refresh ('nom de la vue', 'cf');

0
issam