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 :

UPDATE TABLE ORACLE


Sujet :

Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de Poisson59
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    213
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 213
    Par défaut UPDATE TABLE ORACLE
    Salut

    je veux faire une mise à jour de table par rapport a une autre table

    exemple :

    TABLE A
    C1_____C2
    3501--- TOTO
    3502 ---TATA
    3503 ---TITI
    3504 ---TUTU

    TABLE B
    C1_____C2
    3501---Information Toto
    3502---Information Tata
    3503---Information Titi
    3504---Information Tutu

    je veux mettre a jour la colonne C2 de la table A par la colonne C2 de la table B quand la colonne C1 de la table A = la colonne C1 de la table B

    Thx

    [/b]

  2. #2
    CD
    CD est déconnecté
    Membre éprouvé
    Inscrit en
    Septembre 2004
    Messages
    127
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 127
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    test@BROCANTE> select * from a;
     
            C1 C2
    ---------- --------------------
          3501 TOTO
          3502 TATA
          3503 TITI
          3504 TUTU
          3505 TETE
     
    test@BROCANTE> select * from b;
     
            C1 C2
    ---------- --------------------
          3501 Information Toto
          3502 Information Tata
          3503 Information Titi
          3504 Information Tutu
          3506 Information Tyty
     
    test@BROCANTE> update a
      2  set c2 = (select b.c2 from b
      3  where b.c1=a.c1)
      4  where exists ( select 'oui' from b
      5  where b.c1=a.c1);
     
    4 rows updated.
     
    test@BROCANTE> select * from a;
     
            C1 C2
    ---------- --------------------
          3501 Information Toto
          3502 Information Tata
          3503 Information Titi
          3504 Information Tutu
          3505 TETE

  3. #3
    Membre confirmé Avatar de Poisson59
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    213
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 213
    Par défaut
    MERCI !!!!

  4. #4
    Membre Expert
    Avatar de LeoAnderson
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 938
    Par défaut
    Merci de ne pas crier tout le temps (i.e. majuscules) : on n'est pas sourds !

    De plus, merci de penser aux balises [quote] quand vous citez quelque chose, et de cliquer sur résolu quand le problème est résolu.

    En outre, le forum n'est pas là pour faire le boulot à votre place ! ;-)

  5. #5
    Membre confirmé Avatar de Poisson59
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    213
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 213
    Par défaut
    G un petit probleme voici le message d'erreur !

    The following error has occurred:

    ORA-01407: impossible de mettre à jour ("PNGDEV"."UNV_OBJECT"."OBJ_NAME") avec NULL

    pourtant dans ma TABLE B il n'y a pas de valeur nul !!!

  6. #6
    Membre Expert

    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Janvier 2004
    Messages
    2 862
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 862
    Par défaut
    Alors peut-être que la condition b.c1=a.c1 n'est pas respectée au moins une fois (=> pour une valeur au moins de la colonne c1 de la table a, il n'y a pas d'équivalent dans la table b)

  7. #7
    Membre Expert
    Avatar de LeoAnderson
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 938
    Par défaut
    Merci de penser aux balises [ quote ] quand vous citez quelque chose (un message d'erreur par exemple) (bis)

    Sinon, si il dit que la colonne est nulle, c'est le cas !
    Si vous êtes en 10g Release 2, vous pouvez insérer les lignes en erreurs dans une table d'évènement.
    [edit]
    http://www.oracle.com/technology/pub...rt1.html#error
    [/edit]

  8. #8
    CD
    CD est déconnecté
    Membre éprouvé
    Inscrit en
    Septembre 2004
    Messages
    127
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 127
    Par défaut
    La requête d'update peut donner une erreur s'il y a plusieurs lignes correspondantes pour l'update, mais la valeur null quand il y en a pas, là je ne vois pas...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    test@BROCANTE> select * from b;
     
            C1 C2
    ---------- --------------------
          3501 Information Toto
          3502 Information Tata
          3503 Information Titi
          3504 Information Tutu
          3506 Information Tyty
     
    test@BROCANTE> insert into b values (3501, 'Information 2');
     
    1 row created.
     
    test@BROCANTE> update a
       2  set c2 = (select b.c2 from b
       3  where b.c1=a.c1)
       4  where exists ( select 'oui' from b
       5  where b.c1=a.c1);
    set c2 = (select b.c2 from b
              *
    ERROR at line 2:
    ORA-01427: single-row subquery returns more than one row
    La requête fonctionne de la façon suivante :

    On met à jour la colonne c2 de la table A si il existe une ligne dans la table B pour le même identifiant c1. Seules les lignes qui ont une corrélation avec la table B seront mises à jour.

    La valeur de la colonne c2 mise à jour est celle de la colonne c2 de la table B qui correspond au même id c1.

    Sans la where clause, il y aurait eu des mises à jours nulles (on aurait pas trouver de correspondance dans la table B, donc on aurait mis null). Avec la where clause, je ne vois qu'une valeur nulle dans la table B pour l'id en question qui puisse donner ce résultat...

    On peut toujours essayer de voir cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    select a.c1, a.c2, b.c2
    from a, b
    where a.c1 = b.c1
    and b.c2 is null

  9. #9
    Membre confirmé Avatar de Poisson59
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    213
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 213
    Par défaut
    OK g bien éxécuter ce que tu m'as dit
    TABLE_1 = UNV_OBJECT
    C1 = OBJECT_ID
    TABLE_2 = UNV_LIB_PAIE
    C1 = OBJECT_ID


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    select A.OBJECT_ID, B.LIBELLE from UNV_OBJECT A, UNV_LIB_PAIE B 
    where A.OBJECT_ID= B.OBJECT_ID and B.LIBELLE is null
    resultat : Aucune Ligne
    Sinon effectivement les OBJECT_ID des la table 1 ne sont pas tous dans la table 2

  10. #10
    McM
    McM est déconnecté
    Expert confirmé

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Billets dans le blog
    4
    Par défaut
    Tu peux poster ton update qui plante ?

  11. #11
    Membre Expert
    Avatar de LeoAnderson
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 938
    Par défaut
    Si vous utilisiez l'error logging clause, vous auriez plus d'informations à mon avis ! ;-)

Discussions similaires

  1. [9.3] Foreign table Oracle : delete - update
    Par denis.henkens dans le forum PostgreSQL
    Réponses: 4
    Dernier message: 07/11/2014, 10h20
  2. [DataSet] Update une table oracle dynamiquement
    Par Amuny dans le forum VB.NET
    Réponses: 6
    Dernier message: 10/05/2011, 18h24
  3. [AC-2003] problème update de table VBA vers table oracle
    Par valmelissa dans le forum VBA Access
    Réponses: 10
    Dernier message: 29/10/2009, 12h39
  4. Update sur une Table Oracle
    Par faressam dans le forum VBScript
    Réponses: 3
    Dernier message: 18/09/2008, 10h01
  5. UPDATE : table à partir d'une autre
    Par Laura dans le forum Requêtes
    Réponses: 2
    Dernier message: 28/10/2003, 21h34

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