Bonjour je suis face au problème suivant et je sollicite votre aide.
J'ai sur deux serveurs oracle (orcl1 et orcl2) la même table compagnie avec la structure suivante.
Et sa copie sur orcl2Code:compagnie_orcl1 username | id | compagnie| seq -------------------------------------- USER1 |us1id1| CMR| 123 USER1 |us1id1| RWD| 456 USER1 |us1id1| SING| 789 USER1 |us1id1| CNG | 1011 ------------------------------------ USER2 |us2id2| SEN | 1213 USER2 |us2id2| CND | 1415 USER2 |us2id2| CGT | 1617 USER2 |us2id2| CNG | 1819 USER2 |us2id2| KPG | 2021 ------------------------------------ USER3 |us3id3| RWD| 2223 USER3 |us3id3| CND | 2425 USER3 |us3id3| CID | 2627 USER3 |us3id3| CNG | 2829 USER3 |us3id3| SING| 3031
Code:compagnie_orcl2 username | id | compagnie |seq ------------------------------------- USER1 |us1id1| RWD|0010 USER1 |us1id1| SING|0011 USER1 |us1id1| CNG |0012 ------------------------------------ USER2 |us2id2| SEN|0013 USER2 |us2id2| CNG|0014 USER2 |us2id2| KPG|0015 ----------------------------------- USER3 |us3id3| RWD|0016 USER3 |us3id3| CND|0017 USER3 |us3id3| SING|0018
J'aimerai pouvoir ajouter dans la table compagnie_orcl2 toutes les lignes de la table compagnie_orcl1 commencant par "C" et qui n' y sont pas encore.
Avec la fonction suivante je peux faire l'insertion. Seulement il me reste le problème de la gestion de la séquence.
Sachant que ce sont deux séquences indépendantes l'une de l'autre.
Ce qui fait que je ne peux pas simplement récupérer les valeurs de seq sur orcl1 dans orcl2.
MerciCode:CREATE OR REPLACE FUNCTION comp RETURN NUMBER IS v NUMBER := 0; BEGIN FOR rc IN (SELECT username, ID, compagnie, seq FROM COMPAGNIE_ORCL1@orcl1 c1 WHERE c1.compagnie LIKE 'C%' AND NOT EXISTS (SELECT 1 FROM COMPAGNIE_ORCL2 c2 WHERE c1.username = c2.username AND c1.ID = c2.ID AND c1.compagnie = c2.compagnie AND c1.seq = c2.seq)) -- rajout du seq, il faut tous les cas LOOP v := v + 1; INSERT INTO compagnie_orcl2 (USERNAME, COMPAGNIE, ID, SEQ) VALUES (rc.username, rc.compagnie, rc.ID, rc.seq); -- pourquoi avoir mis nextval ? END LOOP; RETURN v; END comp;
-----