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 :

[connect by] Sous-requêtes corrélées


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    raj
    raj est déconnecté
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    112
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 112
    Par défaut [connect by] Sous-requêtes corrélées
    J'ai une sous-requêtes corrélées (elle même composé d'une sous-requête
    simple) .
    Ma sous-requêtes corrélées est définir au niveau de ma clause select .

    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
          
                                           select 
                                           item_uid, 
                                        // 1ere sous-requête  
                                         (select count(*) from pcms_chdoc_related_items chri where chri.to_item_uid = it.item_uid and chri.reltype_name = 'Affected') nb_affected , 
                                       // 2eme sous-requête
                                         (  select 
                                            max(ltrim(sys_connect_by_path(title,';'),';'))
                                           from
                                          (
                                           select
                                           cdit.to_item_uid , 
                                           cd.title , 
                                          row_number() over (partition by to_item_uid order by from_ch_uid)  as lien_cd ,
                                          row_number() over (partition by to_item_uid order by from_ch_uid) -1 as liens_cdpere  
                                           from pcms_chdoc_related_items cdit ,
                                           pcms_chdoc_data cd
                                           where cdit.from_ch_uid = cd.ch_uid
                                           and
                                          cdit.to_item_uid =it.item_uid
                                          ) hierarchie
                                         group by to_item_uid
                                         connect by liens_cdpere = prior lien_cd
                                         start with lien_cd = 1 ) liste_cds
                                         from
                                         pcms_item_data it                                      where 
                                         it.product_id = 'TAIGA'
    En rouge figure le lien vers la table definie au niveau externe .
    Mon souci est que si je retire la 2eme sous-requête ca marche .
    Par contre ma 2eme sous-requête ne parvient pas à faire le lien
    vers la table definie au niveau externe .
    Le message est :

    [Error Code: 904, SQL State: 42000] ORA-00904: "IT"."ITEM_UID": invalid identifier

    Ma question est :
    Est-ce que le problème vient du connect by (parce qu'en théorie les
    sous-requêtes peuvent s'imbriquer sur plusieurs niveaux ) .?

    Merci de m'éclairer

    NB : pour les connaisseurs , il s'agit d'une requête sur la base de données
    de Serena PVCS Dimensions (solution de gestion de configuration )

  2. #2
    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
    Non, ça ne vient pas du CONNECT BY
    Tu ne peux pas utiliser dans le SELECT un SELECT basé sur un FROM SELECT qui fait référence à ton FROM principal.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT 
    	(SELECT 'ok' FROM dual WHERE d.dummy = 'Z'), 
    	(SELECT 'KO' FROM (SELECT 1 
    			FROM dual c 
    			WHERE d.dummy = 'X')) 
    FROM dual d 
    WHERE dummy = 'X'

  3. #3
    Membre Expert

    Profil pro
    Inscrit en
    Février 2006
    Messages
    3 437
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 3 437
    Par défaut
    Un nom de colonne de "corrélation" ne peut descendre que d'un seul niveau dans la sous requête et non de 2 comme dans votre cas.

    Voir l'exemple sur AskTom.

Discussions similaires

  1. Réponses: 10
    Dernier message: 10/05/2011, 16h12
  2. Requete corrélée ou simple sous-requête
    Par totoche dans le forum SQL
    Réponses: 3
    Dernier message: 06/03/2010, 23h35
  3. UPDATE avec sous-requête corrélée
    Par Oishiiii dans le forum Requêtes
    Réponses: 0
    Dernier message: 04/09/2009, 09h58
  4. Sous-requête corrélée ne fonctionne pas
    Par Sylvain74 dans le forum Access
    Réponses: 5
    Dernier message: 19/09/2008, 08h35
  5. Réponses: 3
    Dernier message: 18/05/2003, 00h16

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