Bonjour,
J'ai trouvé des exemples de mise en place traité dans des universités avec solution. Voilà le problème :
1- Dans la solution la dimension temps implémentée sous forme de vue matérialisé avec mise à jour complet (pas possible de faire de faste (faste refusé) tenant compte de l'expression de la requête construisant la vue) :
La mise à jour de cette vue à la demande, avec la procedure ci-dessus, affiche une erreur :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 Create materialized view temps_Dw build immediate -- refresh fast on demand //pas possibleici refresh force on demand as select distinct to_char(datecommande,'mm/yyyy') as idtemps,to_char(datecommande,'Q/yyyy') as semester, to_char(datecommande,'yyyy') as annee from Vente; execute DBMS_MVIEW.refresh(' temps_Dw ');
Cette erreur est attendu tout simplement parce que la clé primaire de temps_dw est référencé dans la table de fait vente_dw comme clé étrangère (voir 2) . Or la mise à jour complet vide la vue avant d'y chargé les données.ERREUR Ó la ligne 1 :
ORA-12008: erreur dans le chemin de regénération de la vue matÚrialisÚe
ORA-02292: violation de contrainte (DW.FK_VNT3) d'intÚgritÚ – enregistremenfils existant
(2) la table de fait vente_dw et définit comme suit:
sachant que la table vente est la table source :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 CREATE MATERIALIZED VIEW Vente_Dw build immediate -- refresh force on commit refresh force on demand as select noclient,noarticle,to_char(datecommande,'mm/yyyy') as idtemps, SUM(montant) as CA FROM vente group by noclient,noArticle,to_char(datecommande,'mm/yyyy'); alter table vente_Dw add constraint pk_vnt PRIMARY KEY(noclient,noarticle,idtemps); alter table Vente_Dw add constraint fk_vnt1 FOREIGN KEY(noarticle) REFERENCES article(noarticle); alter table Vente_Dw add constraint fk_vnt2 FOREIGN KEY(noclient) REFERENCES client(noclient); alter table Vente_Dw add constraint fk_vnt3 FOREIGN KEY(idtemps) REFERENCES temps_dw(idtemps);
vente(noclient,noarticle,datecommande,montant)
Datecommande est sous forme : dd/mm/yyyy.
Je ne sais pas s'il y a un détail que je ne comprends pas pour exécuter correctement cette solution. Si c’est le cas, prière de m'expliquer.
Et si cette solution n’est pas bonne, j'aimerai bien si vous avez une solution à ce problème. Dites mois svp comment implémenter la table de dimension temps et de fait vente sous Oracle et comment les alimenter a partir des tables sources(vente) pour le moment sans utiliser d’ETL
Merci par avance.
Partager