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

SQL Oracle Discussion :

Identificateur non valide dans une requête imbriquée


Sujet :

SQL Oracle

  1. #1
    Membre régulier
    Profil pro
    Développeur Java
    Inscrit en
    Août 2008
    Messages
    176
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Août 2008
    Messages : 176
    Points : 73
    Points
    73
    Par défaut Identificateur non valide dans une requête imbriquée
    Bonjour,
    j'ai un problème au niveau d'une requête d'update massive, la requête et de la forme:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    update myTable T_ set column1 = 
    (select * from (
         select ( x from otherTable T2_ 
                      where T2_.col1 = T_.col
                      order by T2_.col2 desc
                   ) where rownum = 1
    )
    le problème c'est que oracle ne reconnait pas la colonne T_.col dans la deuxième select

    Des idées pour résoudre ce problème?

    Merci d'avance

  2. #2
    Membre expert

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2012
    Messages
    612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2012
    Messages : 612
    Points : 3 066
    Points
    3 066
    Par défaut
    Bonjour,

    Votre requête est syntaxiquement incorrecte, commencez par donner la vraie requête.

  3. #3
    Membre régulier
    Profil pro
    Développeur Java
    Inscrit en
    Août 2008
    Messages
    176
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Août 2008
    Messages : 176
    Points : 73
    Points
    73
    Par défaut
    Citation Envoyé par FSiebert Voir le message
    Bonjour,

    Votre requête est syntaxiquement incorrecte, commencez par donner la vraie requête.
    La requete réel est un peu complexe j'ai essayé de la simplifier
    c'est quoi l'incorrecte dans cette requete
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    update Table1 T_ set colonne1_ = 
    ( SELECT * FROM 
          ( SELECT T2_.col3 FROM otherTable T2_ 
              WHERE T2_.col1 = T_.col
              ORDER BY T2_.col2 DESC
           ) 
      WHERE rownum = 1
    )
    Merci d'avance

  4. #4
    Membre expert

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2012
    Messages
    612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2012
    Messages : 612
    Points : 3 066
    Points
    3 066
    Par défaut
    Citation Envoyé par Sfaxiano Voir le message
    c'est quoi l'incorrecte dans cette requete
    À vous de nous le dire, quelle est votre erreur ?

  5. #5
    Membre régulier
    Profil pro
    Développeur Java
    Inscrit en
    Août 2008
    Messages
    176
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Août 2008
    Messages : 176
    Points : 73
    Points
    73
    Par défaut
    Citation Envoyé par FSiebert Voir le message
    À vous de nous le dire, quelle est votre erreur ?
    Est ce que la modification en rouge résoud le problème
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    UPDATE Table1 T_ SET colonne1_ = 
    ( SELECT * FROM 
          ( SELECT T2_.col3 FROM otherTable T2_ inner join Table1 T3_
              WHERE T2_.col1 = T3_.col
              ORDER BY T2_.col2 DESC
           ) 
      WHERE rownum = 1

  6. #6
    Membre expert

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2012
    Messages
    612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2012
    Messages : 612
    Points : 3 066
    Points
    3 066
    Par défaut
    Citation Envoyé par Sfaxiano Voir le message
    Est ce que la modification en rouge résoud le problème
    Encore une fois, vous ne nous avez toujours pas dit quel est le problème...
    Avez-vous une erreur de syntaxe (si oui laquelle) ou est-ce que ça ne fait pas ce que vous voulez (dans ce cas que voulez-vous faire) ?

    Je vous invite à lire les règles !

  7. #7
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 947
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 947
    Points : 5 846
    Points
    5 846
    Par défaut
    Utilise keep dense rank first/last pour éviter la sous-requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    UPDATE myTable T_ 
       SET column1 = (SELECT max(x) keep (dense rank first ORDER BY T2_.col2 DESC)
                        FROM otherTable T2_ 
                       WHERE T2_.col1 = T_.col)
    Peut être couplé à MERGE pour les perfs :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    merge into myTable T_ 
    using (SELECT col1, max(x) keep (dense rank first ORDER BY T2_.col2 DESC) as max_x
             FROM otherTable T2_ 
            group by col1) u
       on (u.col1 = T_.col)
     when matched then update
      set t_column1 = u.max_x

  8. #8
    Membre régulier
    Profil pro
    Développeur Java
    Inscrit en
    Août 2008
    Messages
    176
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Août 2008
    Messages : 176
    Points : 73
    Points
    73
    Par défaut
    Citation Envoyé par skuatamad Voir le message
    Utilise keep dense rank first/last pour éviter la sous-requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    UPDATE myTable T_ 
       SET column1 = (SELECT max(x) keep (dense rank first ORDER BY T2_.col2 DESC)
                        FROM otherTable T2_ 
                       WHERE T2_.col1 = T_.col)
    Peut être couplé à MERGE pour les perfs :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    merge into myTable T_ 
    using (SELECT col1, max(x) keep (dense rank first ORDER BY T2_.col2 DESC) as max_x
             FROM otherTable T2_ 
            group by col1) u
       on (u.col1 = T_.col)
     when matched then update
      set t_column1 = u.max_x
    Merci ça résout le problème

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

Discussions similaires

  1. "Argument non Valide" d'une requête
    Par guestCam dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 09/03/2007, 17h46
  2. Valeur non trouvé dans une requète SQL
    Par Jeankiki dans le forum Bases de données
    Réponses: 2
    Dernier message: 15/12/2006, 17h36
  3. variable non reconnue dans une requête sql
    Par sanatou dans le forum C++
    Réponses: 3
    Dernier message: 13/12/2006, 18h43
  4. champs non accessibles dans une requête sélection
    Par Claire31 dans le forum Requêtes et SQL.
    Réponses: 8
    Dernier message: 03/08/2006, 14h22
  5. Passage de paramètres dans une requête imbriquée
    Par DrakkoFR dans le forum Langage SQL
    Réponses: 2
    Dernier message: 07/02/2005, 13h46

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