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

Langage SQL Discussion :

[ORACLE 9.i] UPDATE par une valeur issue d'une autre table


Sujet :

Langage SQL

  1. #1
    Membre régulier
    Inscrit en
    Avril 2004
    Messages
    97
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 97
    Points : 91
    Points
    91
    Par défaut [ORACLE 9.i] UPDATE par une valeur issue d'une autre table
    Bonjour,

    Le titre de mon message ne doit pas etre tres clair. Je vais vous expliquer ça plus en détail.
    J'ai une table (table d'EIM) qui a un ensemble de champs qui forment une foreign key sur cette meme table.
    Je voudrais updater un champ enfant par la valeur du parent.
    J'ai fait ceci qui ne fontionne pas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    UPDATE EIM_LST_OF_VAL tab
    SET    tab.LOV_SUB_TYPE=A.LOV_NAME
    WHERE  tab.LOV_TYPE='RVI_SOLUTION_DOMAIN' AND (tab.PAR_TYPE,tab.PAR_VAL,tab.PAR_LANG_ID,tab.PAR_SUB_TYPE,tab.PAR_BU) IN
    (SELECT A.LOV_TYPE,A.LOV_VAL,A.LOV_LANG_ID,A.LOV_SUB_TYPE,A.LOV_BU 
     FROM   EIM_LST_OF_VAL A 
     WHERE  A.LOV_TYPE='RVI_APPLICATION' AND A.LOV_NAME LIKE 'Partner%')
    Je ne peux pas appeler A.LOV_NAME en dehors de la caluse SELECT. Je n'ai pas trop d"idée.

    Le message d'erreur est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ORA-00904: A.LOV_NAME Invalid identifier
    .
    Je suis sous oracle 9.i.

    Merci de votre aide.

  2. #2
    Membre chevronné

    Profil pro
    Inscrit en
    Avril 2005
    Messages
    1 673
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 673
    Points : 1 775
    Points
    1 775
    Par défaut
    Salut,

    Merci de :
    - consultez ce lien : http://sql.developpez.com/sqlaz/dml/#L3.5
    - nous donner votre message d'erreur ou ce qui justifie que ça ne marche pas
    - nous indiquer votre SGBD et sa version.

  3. #3
    Membre régulier
    Inscrit en
    Avril 2004
    Messages
    97
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 97
    Points : 91
    Points
    91
    Par défaut
    Citation Envoyé par Magnus
    Salut,

    Merci de :
    - consultez ce lien : http://sql.developpez.com/sqlaz/dml/#L3.5
    - nous donner votre message d'erreur ou ce qui justifie que ça ne marche pas
    - nous indiquer votre SGBD et sa version.
    J'ai déjà consulté ce lien mais il ne traite pas du problème que je rencontre.

  4. #4
    Membre régulier
    Inscrit en
    Avril 2004
    Messages
    97
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 97
    Points : 91
    Points
    91
    Par défaut
    J'ai aussi fait ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    UPDATE EIM_LST_OF_VAL
    SET    LOV_SUB_TYPE=(
                SELECT A.LOV_VAL FROM EIM_LST_OF_VAL A 
                WHERE A.LOV_TYPE=PAR_TYPE AND A.LOV_VAL=PAR_VAL AND A.LOV_LANG_ID=PAR_LANG_ID AND A.LOV_SUB_TYPE=PAR_SUB_TYPE AND A.LOV_BU=PAR_BU AND A.LOV_TYPE='RVI_APPLICATION')
    WHERE  LOV_TYPE='RVI_SOLUTION_DOMAIN'
    Il n'y a pas d'erreurs mais pourtant les champs LOV_SUB_TYPE restent vides alors que tous les champs LOV_VAL de la table ont une valeur...

  5. #5
    Membre chevronné

    Profil pro
    Inscrit en
    Avril 2005
    Messages
    1 673
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 673
    Points : 1 775
    Points
    1 775
    Par défaut
    Citation Envoyé par sg-40
    J'ai déjà consulté ce lien mais il ne traite pas du problème que je rencontre.
    En fait, si je cerne bien votre problématique, si !
    Vous devez faire une sous-requête du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    UPDATE MYTABLE A
    SET    A.X = (SELECT B.Y
                  FROM   MYTABLE B
                  WHERE  A.X = B.X);
    ATTENTION : surtout ne pas oublier d'effectuer la jointure entre la table à mettre à jour (ici 'A') et la table de la sous-requête (ici 'B') !

  6. #6
    Membre régulier
    Inscrit en
    Avril 2004
    Messages
    97
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 97
    Points : 91
    Points
    91
    Par défaut
    Tu avais raison je n'avais pas donné un alias à la table updatée :/

    J'ai pu simplifier la requete en trouvant des champs permettant de faire la jointure.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    UPDATE EIM_LST_OF_VAL B
    SET    B.LOV_SUB_TYPE=(
         SELECT A.LOV_VAL FROM EIM_LST_OF_VAL A     
         WHERE A.T_EXPORTED_ROW_ID=B.T_LSTOF_VAL_PARROW)
    WHERE  B.LOV_TYPE='RVI_SOLUTION_DOMAIN'
    Maintenant j'ai l'erreur suivante
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ORA-01427: Single row query returns more than one row
    On dirait que B.T_LSTOF_VAL_PARROW n'a pas la valeur de l'occurence qui est train d'etre updatée

  7. #7
    Membre chevronné

    Profil pro
    Inscrit en
    Avril 2005
    Messages
    1 673
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 673
    Points : 1 775
    Points
    1 775
    Par défaut
    Citation Envoyé par sg-40
    On dirait que B.T_LSTOF_VAL_PARROW n'a pas la valeur de l'occurence qui est train d'etre updatée
    Personnellement, je ne pense pas que ça vienne de là.
    Pour t'en assurer, tu peux commencer par extraire les lignes que retourne ta sous-requête pour chaque valeur que prend B.T_LSTOF_VAL_PARROW.
    Tu constateras si effectivement il existe une ligne ayant B.T_LSTOF_VAL_PARROW tel qu'il existe plus d'une ligne retournée par ta sous-requête.

  8. #8
    Membre régulier
    Inscrit en
    Avril 2004
    Messages
    97
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 97
    Points : 91
    Points
    91
    Par défaut
    Le probleme venait effectivement de là. J'avais des doublons pour toutes les valeurs.

    Je te remercie pour ton aide ^^

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 10
    Dernier message: 05/02/2015, 15h47
  2. Assigner une valeur issue d'une formule
    Par jeremm dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 24/11/2010, 12h07
  3. Réponses: 8
    Dernier message: 13/04/2010, 14h15
  4. [AC-97] Afficher une valeur issue d'une table de manière aléatoire
    Par JazzKDU dans le forum IHM
    Réponses: 0
    Dernier message: 20/10/2009, 14h46
  5. Poster une valeur issue d'une fenêtre JavaScript
    Par Mathieu72 dans le forum Langage
    Réponses: 10
    Dernier message: 08/03/2008, 17h12

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