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
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.
exécutez ce script pour rafraîchir les données en vue matérialisée:
BEGIN
DBMS_SNAPSHOT.REFRESH('Name here');
END;
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
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');
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;
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 => '?');
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.
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');