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

Oracle Discussion :

[9iR2] UPDATE pour MAJ table ds 1 autre identique...


Sujet :

Oracle

  1. #1
    Membre habitué
    Inscrit en
    Juillet 2004
    Messages
    110
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 110
    Points : 137
    Points
    137
    Par défaut [9iR2] UPDATE pour MAJ table ds 1 autre identique...
    Bonjour,

    Je n'arrive pas mettre à jour une table à partir d'une autre où les champs sont identiques.

    Voilà ce que j'essaye :

    SQL> UPDATE tablea p SET VALUE(p) = (SELECT VALUE(q) FROM tableb q WHERE p.champ1 = q.champ1);
    UPDATE tablea p SET VALUE(p) = (SELECT VALUE(q) FROM tableb q WHERE p.champ1 = q.champ1)
    *
    ERREUR à la ligne 1 :
    ORA-00904: "P" : identificateur non valide

    Pourtant, c'est bien l'exemple du book officiel (version PDF) SQL Oracle 9i Release 2.

    Extrait :

    "Updating an Object Table: Example The following statement updates a row of
    object table table1 by selecting a row from another object table table2:
    UPDATE table1 p SET VALUE(p) =
    (SELECT VALUE(q) FROM table2 q WHERE p.id = q.id)
    WHERE p.id = 10;"

    Je ne comprends pas pourquoi ça ne marche pas !
    Une erreur dans la syntaxe de leur doc ???

    Help !
    Merci.

  2. #2
    Membre éclairé Avatar de plabrevo
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    547
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 547
    Points : 670
    Points
    670
    Par défaut
    Comment les tables tablea et tableb ont-t-elles ete creees? Ont-elles ete mappees sur un object type identique?


    (Updated)

  3. #3
    Membre habitué
    Inscrit en
    Juillet 2004
    Messages
    110
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 110
    Points : 137
    Points
    137
    Par défaut
    Bonsoir,

    On va dire juste avec un simple
    CREATE TABLE tablea (champ1 VARCHAR2(2), champ2 VARCHAR2(5));
    et même chose pour tableb.

    En fait, je test sur ces simples tables, mais la réalité est qu'il y a bcp de champs et que le but c'était de mettre à jour tous les champs d'une table avec ceux de l'autre sans avoir à saisir le nom de chaque champ une sorte de SELECT * mais en UPDATE...

  4. #4
    Membre éclairé Avatar de plabrevo
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    547
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 547
    Points : 670
    Points
    670
    Par défaut
    Ca ne marchera que si les tables sont creees sur un type object.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    CREATE TYPE my_type
    (champ1         <datatype>
    ,champ2         <datatype>)
    /
    CREATE TABLE tablea OF my_type
    /
    CREATE TABLE tableb OF my_type
    /
    Je pense que la documentation doit specifier une creation de table suivant ce meme principe.

  5. #5
    Membre habitué
    Inscrit en
    Juillet 2004
    Messages
    110
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 110
    Points : 137
    Points
    137
    Par défaut
    Bonjour,

    Je viens d'essayer :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SQL> create type montype
      2  (champ1 VARCHAR2(2), champ2 VARCHAR2(3))
      3  /
    Avertissement : Type créé avec erreurs de compilation.

    Ca ne marche pas...

    Sinon, les autres tables existent déjà et je dois partir de ces dernières.
    Une table contient x enregistrements qui me servent à mettre à jour une autre table identique de y enregistrements.
    Et le but, c'est de MAJ tous les champs, donc je me disais qu'il y doit bien y avoir une instruction courte pour éviter de taper tous les champs.

  6. #6
    Membre éclairé Avatar de plabrevo
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    547
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 547
    Points : 670
    Points
    670
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    CREATE TYPE my_type       AS OBJECT
    (champ1       <datatype>
    ,champ2       <datatype>)
    ...

    http://download-west.oracle.com/docs/cd/B10501_01/server.920/a96540/statements_82a.htm#SQLRF01506

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 36
    Points : 43
    Points
    43
    Par défaut
    Et pourquoi ne pas utiliser un "UPDATE" tout simple:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    UPDATE tablea p 
    SET (p.champ1, p.champ2) = 
          (SELECT q.champ1, q.champ2 
          FROM tableb q WHERE p.champ1 = q.champ1)
    WHERE p.champ1 in (select tableb.champ1 from tableb);
    Ce ne serait pas plus simple pour finir???

  8. #8
    Membre éclairé Avatar de plabrevo
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    547
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 547
    Points : 670
    Points
    670
    Par défaut
    Le fait de pouvoir mettre a jour toutes les colonnes aussi simplement avec une seule commande est assez genial en theorie.

    C'est cependant une manipulation relativement impossible a realiser en pratique car il est assez rarissime que deux tables partagent la meme definition.

  9. #9
    Membre habitué
    Inscrit en
    Juillet 2004
    Messages
    110
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 110
    Points : 137
    Points
    137
    Par défaut
    Bonjour,

    J'abandonne ce sujet.
    Dommage .

    Néanmoins, merci à tous de votre aide et de vos remarques.

Discussions similaires

  1. Pb UPDATE d'une table avec une autre table
    Par Korben-Dallas dans le forum Requêtes
    Réponses: 50
    Dernier message: 07/02/2013, 17h09
  2. requête UPDATE pour deux tables
    Par Lancelot du Lac35 dans le forum Requêtes
    Réponses: 3
    Dernier message: 06/02/2012, 17h18
  3. MAJ table dans une autre Database
    Par pchasser dans le forum VBA Access
    Réponses: 8
    Dernier message: 08/05/2009, 20h06
  4. update d'une table à partir une autre table
    Par ouadie99 dans le forum Langage SQL
    Réponses: 3
    Dernier message: 03/12/2007, 18h45

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