Bonjour,
J'ai 2 bases Oracle distinctes DB1 et DB2, chacune contenant une table DOSSIER (qui a le même schéma dans les 2 bases), et chaque table DOSSIER étant alimentée par le même système.
Pour un outil d'administration, je dois regrouper dans une table DOSSIER d'une base DB3 le contenu des 2 tables DOSSIER des bases DB1 et DB2.

Le principe retenu est d'utiliser une "Materialized View" que je crée comme ceci :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
 
CREATE MATERIALIZED VIEW DB3.DOSSIER
REFRESH COMPLETE ON DEMAND
WITH PRIMARY KEY
AS 
select DOSSIER.* from DOSSIER@DB1
UNION
select DOSSIER.* from DOSSIER@DB2
DB1 et DB2 sont des DB_LINKS que je créé précédemment. Cela marche bien sauf je voudrais ne garder qu'un exemplaire des lignes ayant la même clé primaire.

Par exemple, si j'ai ceci dans DB1 :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
 
DOS_ID  DOS_VERSION  DOS_TYPE
10         1            SV
11         3            FV
et ceci dans DB2 :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
 
DOS_ID  DOS_VERSION  DOS_TYPE
10         2            SV
12         4            FV
la requete de la "Materialized View" va me renvoyer :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
 
DOS_ID  DOS_VERSION  DOS_TYPE
10         1             SV
10         2             SV
11         3             FV
12         4             FV
Je voudrais que la ligne ayant 10 pour clé primaire ne soit présente qu'une fois (la ligne présente dans DB1, pas celle de DB2)

Quel est la meilleure requête pour arriver à ce résultat ?

Merci d'avance