IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

DB2 Discussion :

Update multi rows


Sujet :

DB2

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de rgomes
    Homme Profil pro
    IT Developer JAVA Senior
    Inscrit en
    Juin 2004
    Messages
    128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : IT Developer JAVA Senior
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2004
    Messages : 128
    Par défaut Update multi rows
    Hello,

    J'aimerais faire le traitement suivant, un update "massif", à savoir remplacer les anciens ID de TABLE1 (100,101,102) dans un clob par ceux dans la table de correspondance TABLE2 :

    TABLE1
    ---------------------------------------------------------------------------------------------------------------------------------
    ID(int) -------------------------------------------- DATA(clob)
    ---------------------------------------------------------------------------------------------------------------------------------
    1 --------------------------------------------- <data><ids><id>100</id><id>101</id><id>102</id></ids></data>
    ----------------------------------------------------------------------------------------------------------------------------------

    TABLE2
    ----------------------------------------------------------------------------------------------------------------------------------
    ID -- ANCIEN_ID -- NOUVEAU_ID --
    ----------------------------------------------------------------------------------------------------------------------------------
    1 -- 101 -- 233 --
    1 -- 102 -- 248 --
    1 -- 103 -- 255 --
    ----------------------------------------------------------------------------------------------------------------------------------

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    UPDATE TABLE1 T1 SET DATA=
    (
      SELECT replace(T1.DATA, T2.ANCIEN_ID, T2.NOUVEAU_ID) FROM TABLE2 T2 WHERE t2.ID=T1.ID
    )
    C'est un exemple (j'ai des milliers de lignes dans ce cas, je ne peux pas faire 3 requêtes ).

    Le problème : le select retourne évidemment pusieurs lignes et donc l'update échoue. Comment dois-je m'y prendre ?


    Merci !

    Info complémentaire : je suis sous DB2/AS400.

  2. #2
    Membre expérimenté
    Homme Profil pro
    Architecte technique & logiciel IBM i
    Inscrit en
    Septembre 2010
    Messages
    179
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte technique & logiciel IBM i
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2010
    Messages : 179
    Par défaut
    As-tu regardé une transformation XSLT via XSLTRANSFORM ? C'est très puissant (ça permet de faire des boucles, par exemple), mais c'est "un vrai métier" !
    Sinon, faire un UPDATE sur "quelques milliers" de lignes 3 fois d'affilée, ce n'est pas cela qui va mettre ton IBM i sur les rotules. C'est même plutôt son point fort : les traitements de masse. As-tu déjà mesuré le temps d'un UPDATE sur toute ta table ?

  3. #3
    Membre confirmé Avatar de rgomes
    Homme Profil pro
    IT Developer JAVA Senior
    Inscrit en
    Juin 2004
    Messages
    128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : IT Developer JAVA Senior
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2004
    Messages : 128
    Par défaut
    Merci pour ta réponse. Le problème est que je n'arrive pas à construire mon update.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    UPDATE TABLE1 T1 SET DATA=
    (
    SELECT replace(T1.DATA, T2.ANCIEN_ID, T2.NOUVEAU_ID) FROM TABLE2 T2 WHERE t2.ID=T1.ID
    )
    le moteur échoue en me disant que le select retourne plusieurs lignes.

  4. #4
    Membre Expert Avatar de bernard59139
    Profil pro
    Retired
    Inscrit en
    Octobre 2006
    Messages
    966
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Retired

    Informations forums :
    Inscription : Octobre 2006
    Messages : 966
    Par défaut
    ce que je ferai

    1) revoir la table TABLE2, avec 7 colonnes au lieu de 3 (ID, A1, N1, A2, N2, ...). avec ID comme index_unique et A* pour ancien, N* pour nouveau
    2) changer le sql en empilant les REPLACE
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    REPLACE(REPLACE(REPLACE(T1.DATA, A1, N1), A2, N2),A3,N3)

    Sinon, reste la solution du programme

  5. #5
    Membre confirmé Avatar de rgomes
    Homme Profil pro
    IT Developer JAVA Senior
    Inscrit en
    Juin 2004
    Messages
    128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : IT Developer JAVA Senior
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2004
    Messages : 128
    Par défaut
    Impossible, j'ai des milliers de combinaisons anciens/nouveaux ID.

  6. #6
    Membre Expert Avatar de bernard59139
    Profil pro
    Retired
    Inscrit en
    Octobre 2006
    Messages
    966
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Retired

    Informations forums :
    Inscription : Octobre 2006
    Messages : 966
    Par défaut
    AMHA, avec SQL, ce n'est pas possible.

    Reste à écrire un beau programme ou tenter avec la méthose de pwrdwnsys (XLT je ne connais pas).

Discussions similaires

  1. Un UPDATE multi-table
    Par Séb. dans le forum Requêtes
    Réponses: 5
    Dernier message: 17/07/2008, 03h51
  2. [MySQL] Update multi inputs
    Par Him dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 05/06/2007, 03h04
  3. [Select] Problème de multi rows
    Par WwiloO dans le forum Langage SQL
    Réponses: 3
    Dernier message: 26/01/2007, 10h41
  4. Réponses: 3
    Dernier message: 25/01/2005, 12h31
  5. UPDATE multi-tables sous SQL Server
    Par Cybernet dans le forum Langage SQL
    Réponses: 8
    Dernier message: 25/03/2004, 15h34

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo