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 :

Requête récursive - condition d'arrêt [11gR2]


Sujet :

SQL Oracle

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    70
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 70
    Points : 44
    Points
    44
    Par défaut Requête récursive - condition d'arrêt
    Bonjour,

    je souhaite écrire une requête récursive de ce type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    select node,
           node_child,
           CONNECT_BY_ISCYCLE "Cycle",
           level,
           sys_connect_by_path(node,'/')
      from temp
     
    start with node=5000
    connect by NOCYCLE node = prior node_child;
    Mon problème est que la table contient plein de cycle (je ne peux pas les modifier).
    Ce que j'aurais voulu c'est que si c'est un cycle, qu'il stoppe le traitement de ce node (condition d’arrêt) du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Where CONNECT_BY_ISCYCLE "Cycle" = 0
    et donc qu'il arrete de tourner en boucle ...

    Y a t'il un moyen de le faire ?

    Merci de vos retours,
    Alexandre

  2. #2
    Membre expérimenté
    Avatar de islamov2000
    Homme Profil pro
    Ingénieur d'études & developpement en informatique
    Inscrit en
    Septembre 2007
    Messages
    814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Ingénieur d'études & developpement en informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2007
    Messages : 814
    Points : 1 717
    Points
    1 717
    Billets dans le blog
    6
    Par défaut
    Dans le cas pareil, tu ne peux pas stopper la boucle. En effet, à chaque exécution de la requête tu auras un message d'erreur indiquant existence d'une boucle.
    Moi, j'ai déjà rencontré ce type de problème, et je n'avais que éliminer la boucle en implémentant un petit programme.
    d'avoir Pensé à voter positivement pour ceux qui vous ont aidés et surtout à mettre si le cas.
    ça encourage.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    70
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 70
    Points : 44
    Points
    44
    Par défaut
    Bonjour,
    merci pour la réponse, malheureusement je ne peux pas modifier les données ...

  4. #4
    Membre expérimenté
    Avatar de islamov2000
    Homme Profil pro
    Ingénieur d'études & developpement en informatique
    Inscrit en
    Septembre 2007
    Messages
    814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Ingénieur d'études & developpement en informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2007
    Messages : 814
    Points : 1 717
    Points
    1 717
    Billets dans le blog
    6
    Par défaut
    Si ton but est d'éliminer les nœuds qui provoquent des boucles en ayant en sortie une arborescence sous forme d'une table, tu peux mettre comme suite:

    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
    with  test as
    (select 'A' PERE   ,'B' FILS from dual union
    select     'B',    'D' from dual union
    select     'D',    'E' from dual union
    select     'E',    'A' from dual union
    select     'B',    'C' from dual union
    select     'C',    'A' from dual 
     
     
     
    )
     
    select pere,
           fils,
           CONNECT_BY_ISCYCLE "Cycle",
           level,
           sys_connect_by_path(pere,'/')
      from test
     
    where CONNECT_BY_ISCYCLE =0
     
    start with pere='A'
    connect by NOCYCLE pere = prior fils
    resultat:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
        PERE    FILS    Cycle    LEVEL    SYS_CONNECT_BY_PATH(PERE,'/')
        A         B         0         1           /A
        B         C         0         2           /A/B
        B         D         0         2           /A/B
        D         E         0         3           /A/B/D
    d'avoir Pensé à voter positivement pour ceux qui vous ont aidés et surtout à mettre si le cas.
    ça encourage.

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    70
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 70
    Points : 44
    Points
    44
    Par défaut
    Merci beaucoup

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

Discussions similaires

  1. Requête récursive dans access
    Par Australia dans le forum Requêtes et SQL.
    Réponses: 15
    Dernier message: 29/07/2014, 15h15
  2. Calcul requête avec conditions multiples
    Par Phullbrick dans le forum Access
    Réponses: 7
    Dernier message: 18/04/2006, 13h45
  3. [SQL Server]Problème avec une requête récursive
    Par evans dans le forum Langage SQL
    Réponses: 3
    Dernier message: 05/04/2006, 20h16
  4. [SQL Server] Requête récursive
    Par margagn dans le forum Langage SQL
    Réponses: 8
    Dernier message: 01/04/2006, 04h31
  5. Requête récursive
    Par tirixil dans le forum Bases de données
    Réponses: 3
    Dernier message: 07/03/2005, 16h11

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