Comment rafraîchir la vue matérialisée dans oracle

Iam essaie d'actualiser la vue matérialisée par l'aide de:

DBMS_MVIEW.REFRESH('v_materialized_foo_tbl')

mais il lance une déclaration 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 quand j'appelle cette procédure avec

MAT_VIEW_FOO_TBL;

c'est encore une erreur.

veuillez proposer une solution pour cette question.

Merci, Srinivas

42
demandé sur Ollie 2012-07-19 10:10:15

8 réponses

essaye ceci:

DBMS_SNAPSHOT.REFRESH( 'v_materialized_foo_tbl','f'); 

premier paramètre est le nom de mat_view et deuxième définit le type de refresh. f indique rafraîchissement rapide. mais gardez cette chose à l'esprit qu'elle sera remplacer toute autre option de mise à jour.

37
répondu fahim ashraf 2012-12-19 05:11:23

exécutez ce script pour rafraîchir les données en vue matérialisée:

BEGIN
DBMS_SNAPSHOT.REFRESH('Name here');
END;
45
répondu Waqas Ali 2016-06-26 17:12:42

un peu en retard au jeu, mais j'ai trouvé un moyen de faire fonctionner la syntaxe originale dans cette question (je suis sur Oracle 11g)

** d'abord passer 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 en fait pour moi, et l'ajout de l'option parallélisme a accéléré mon exécution environ 2,5 fois.

Plus d'infos ici: Comment rafraîchir une vue matérialisée en parallèle

8
répondu Sonic Soul 2014-10-06 22:57:03

Vous pouvez rafraîchir complètement une vue matérialisée comme suit:

EXECUTE  
DBMS_SNAPSHOT.REFRESH('Materialized_VIEW_OWNER_NAME.Materialized_VIEW_NAME','COMPLETE');
6
répondu Yasir Meraj 2016-02-24 15:12:24

si vous travaillez avec SQL Developer, vous devez mettre le dbms_view en minuscules. Le reste est très 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;
1
répondu Will Lovett 2014-07-14 14:17:36

Meilleure option est d'utiliser le"?"argument pour la méthode. De cette façon, DBMS_MVIEW choisira la meilleure façon de rafraîchir, donc il fera le rafraîchissement le plus rapide possible pour vous. et ne manqueront pas si vous essayez quelque chose comme méthode=>'f' lorsque vous avez réellement besoin d'une actualisation complète. : -)

à partir de SQL*Plus prompt:

EXEC DBMS_MVIEW.REFRESH('my_schema.my_mview', method => '?');
1
répondu mike 2016-09-02 23:21:51

essayez la syntaxe suivante:

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 vous aidera.

0
répondu Vikash Prasad 2016-04-11 01:15:36

lorsque nous devons utiliser des procédures internes ou des paquets, nous devons utiliser la commande "EXECUTE", alors cela fonctionnera.

EX:

exécuter exec DBMS_MVIEW.REFRESH ('v_materialized_foo_tbl');

-1
répondu moses 2017-02-09 06:51:43