Répondre à la discussion
Affichage des résultats 1 à 5 sur 5

Actualiser une table en fonction d'une autre



  1. #1
    Teddi

    Actualiser une table en fonction d'une autre

    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.


    Code:
    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
    Et sa copie sur orcl2


    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.

    Code:
    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;
    Merci

    -----


  2. Publicité
  3. #2
    Fustigator

    Re : Actualiser une table en fonction d'une autre

    Bonjour

    Je n'ai que de vagues souvenir d'Oracle, mais je présume que la séquence est gérée sur la table de destination. (avant il fallait un trigger pour insérer le nextval, mais ce n'est peut être plus nécessaire maintenant).

    Dans ce cas, il suffit de l'ignorer à l'insertion, ou alors je n'ai pas compris ton problème
    .
    Accessoirement, je ne comprends pas pourquoi tu utilises un curseur. (en supposant que les deux serveurs soient liés).

  4. #3
    Ikhar84

    Re : Actualiser une table en fonction d'une autre

    C'est complétement casse gueule et inutile si c'est pour avoir une redondance des données, les séquences sont indépendantes entre les deux serveurs et la liaison entre les données n'aura plus aucun sens.

    Regardez du côté de la réplication par exemple.
    J'ai glissé Chef !

  5. #4
    Teddi

    Re : Actualiser une table en fonction d'une autre

    Bonjour Ikhar84.

    Franchement ta réponse ne m'aide pas pour un sou.
    La base je l'ai récupéree telle qu'elle. Alors si c'est possible je souhaiterais une aide technique. Mais si c'est pour me dire ce qui aurait dû être fait non merci. Car je ne peux rien y changer de toute manière

  6. #5
    Fustigator

    Re : Actualiser une table en fonction d'une autre

    Citation Envoyé par Teddi Voir le message
    Bonjour Ikhar84.

    Franchement ta réponse ne m'aide pas pour un sou.
    La base je l'ai récupéree telle qu'elle. Alors si c'est possible je souhaiterais une aide technique. Mais si c'est pour me dire ce qui aurait dû être fait non merci. Car je ne peux rien y changer de toute manière
    Pourtant c'est pas la mer à boire à refaire; qu'est ce qui l'empêche ? (même pas besoin de composant tierce : les Oracle Stream font parti de la licence standard).

    Sinon, il manque un élément, essentiel : il y a-t-il des FK qui pointent sur la colonne contenant la séquence ? Si oui, le mieux est de refaire le bouzin, avec la réplication, il y a pour 2h de boulot à tout péter (avec Sql Server, ce serait 20mn, mais avec Oracle je ne sais pas), alors que les bricolages de re-normalisation de séquences ont toutes les chances de consommer beaucoup plus de temps avant de tomber en marche.

  7. A voir en vidéo sur Futura

Sur le même thème :

Discussions similaires

  1. utiliser table loi normale pour calculer autre fonction
    Par stakhanov45 dans le forum Mathématiques du collège et du lycée
    Réponses: 1
    Dernier message: 15/03/2018, 22h21
  2. Réponses: 5
    Dernier message: 22/03/2016, 21h00
  3. [SQL] Utiliser données d'une autre table dans un select
    Par Lechero dans le forum Programmation et langages, Algorithmique
    Réponses: 1
    Dernier message: 16/12/2015, 17h33
  4. actualiser une div avec javascript
    Par elchurro97 dans le forum Programmation et langages, Algorithmique
    Réponses: 0
    Dernier message: 29/05/2013, 07h31
  5. Comment insérer une fonction Matlab dans les paramètres d'entrée d'une autre fonction ??
    Par °Oo>>PCSI2<<oO° dans le forum Mathématiques du supérieur
    Réponses: 3
    Dernier message: 04/01/2010, 07h16