Précédent   Forum des professionnels en informatique > Bases de données > Oracle
Oracle Forum Oracle : le serveur, les outils, ... Voir F.A.Q Oracle Tutoriels Oracle
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 18/03/2011, 14h25   #1
Membre habitué
 
Femme Chris
Développeur Web
Inscription : mai 2010
Messages : 225
Détails du profil
Informations personnelles :
Nom : Femme Chris
Localisation : France

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : mai 2010
Messages : 225
Points : 103
Points : 103
Par défaut Connect by mais pour les ascendants est ce possible?

Bonjour,
J'aimerai savoir s'il existe le même principe que connect by prior qui récupère les descendants mais dans l'autre sens donc récupérer les ascendants.

Je m'explique:
Je vais prendre l'exemple de la FAQ Oracle: http://oracle.developpez.com/faq/?page=3-1#recursive (qui m'a permit au passage de connaitre sys_connect_by_path.)

Bref, par rapport à l'exemple, j'aimerai pouvoir récupérer tout les parents de la catégorie 'Apéritif' donc comme ceux-ci:
-Apéritif-Alcool-Boisson-Alimentaire.

Est ce possible? si oui comment et est ce que cela peut tenir en une seule requête?

j'espère que ce que j'ai expliqué est assez clair.

Merci d'avance.
chris0938 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/03/2011, 14h40   #2
Rédacteur
 
Homme Salim
Développeur et DBA Oracle
Inscription : octobre 2006
Messages : 872
Détails du profil
Informations personnelles :
Nom : Homme Salim
Localisation : Canada

Informations professionnelles :
Activité : Développeur et DBA Oracle

Informations forums :
Inscription : octobre 2006
Messages : 872
Points : 1 100
Points : 1 100
Salut,

Essaie cette requête
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 
SELECT ID, libe, LTRIM (resultat, '-') resultat
  FROM (SELECT     c.*, SYS_CONNECT_BY_PATH (c.libe, '-') resultat
              FROM categorie c
        START WITH ID = 2133
        CONNECT BY PRIOR id_parent = ID)
 WHERE id_parent IS NULL;
 
 
        ID LIBE             RESULTAT                                          
---------- ---------------- --------------------------------------------------
         2 Alimentaire      Apéritif-Alcool-Boisson-Alimentaire               
 
 
1 row selected.
__________________
Publications: http://schelabi.developpez.com/
salim11 est déconnecté   Envoyer un message privé Réponse avec citation 20
Vieux 18/03/2011, 14h50   #3
Membre habitué
 
Femme Chris
Développeur Web
Inscription : mai 2010
Messages : 225
Détails du profil
Informations personnelles :
Nom : Femme Chris
Localisation : France

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : mai 2010
Messages : 225
Points : 103
Points : 103
Merci merci merci.

Cela fonctionne très bien. C'est exactement cela que je souhaite avoir

Encore merci.
chris0938 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/03/2011, 17h02   #4
Rédacteur
 
Inscription : décembre 2002
Messages : 2 385
Détails du profil
Informations personnelles :
Localisation : France, Var (Provence Alpes Côte d'Azur)

Informations forums :
Inscription : décembre 2002
Messages : 2 385
Points : 3 261
Points : 3 261
Ca peut aussi se faire sans sous-requête, car dans les requêtes hiérarchiques, le WHERE est appliqué après le CONNECT BY.
Autrement dit, on calcule toute la hiérarchie, et on ne retient que les lignes qui satisfont le WHERE.

Code :
1
2
3
4
5
6
7
8
9
10
11
 
col chaine format A50
SELECT sys_connect_by_path(libe, '-') chaine
FROM categorie
WHERE id_parent IS NULL
start WITH libe='Apéritif'
connect BY id=prior id_parent;
 
CHAINE
---------------------------------------------
-Apéritif-Alcool-Boisson-Alimentaire
__________________
Consultant / formateur Oracle indépendant
Certifié OCP 10g et 11g, sécurité 11g
Pomalaix est déconnecté   Envoyer un message privé Réponse avec citation 10
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 22h29.


 
 
 
 
Partenaires

Hébergement Web