Question

J'ai remarqué récemment que l'appel de dbms_mview.refresh (...), qui actualise les vues matérialisées dans Oracle, comporte une validation implicite.

Toutes les idées - autres que "mais bien". - pourquoi cette action a-t-elle une validation implicite?

Était-ce utile?

La solution

En fonction de votre version Oracle et / ou des paramètres que vous fournissez, dbms_mview.refresh effectue peut-être un processus TRUNCATE suivi d'un chargement direct. TRUNCATE est une commande DDL et, en tant que telle, émet une validation implicite. Le chargement direct ne nécessite pas de validation.

Si vous utilisez une version plus récente d'Oracle, je pense que 10.2+, vous pouvez définir le paramètre atomic_refresh sur TRUE et l'actualiser dans une seule transaction, à l'aide des commandes DELETE / INSERT standard. Cette méthode pourrait toutefois être un peu plus lente.

Autres conseils

D'après Tom Kyte, c'est parce que une décision a été prise au moment de la conception de considérer l'actualisation comme une opération DDL . Puisque toutes les opérations DDL sont implicitement validées, celle-ci le fait également. Malheureusement, il ne répond pas à la question qui en résulte: pourquoi ont-ils choisi de le faire en DDL?

L’arround de travail consiste à appeler dbms_mview.refresh dans une transaction autonome (créer une procédure PL / SQL avec pragma autonome_transaction).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top