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 :

[ORACLE 10.g] Probleme de START WITH


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé

    Inscrit en
    Décembre 2003
    Messages
    166
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 166
    Par défaut [ORACLE 10.g] Probleme de START WITH
    Bonjour,
    Je suis entrain de developper une application qui represente des nomclatures de pièces, donc hiérarchisées.

    J'ai une requète qui ressemble à ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    select level, t.* from (
       select id_ligne, id_pere, libelle from ma_table
    )t
    START WITH id_pere IS NULL CONNECT BY PRIOR id_ligne = id_pere;
    Si l'utilisateur ne filtre sur aucun critère, tout se passe bien. Il y a toujours un "id_pere" à NULL pour les niveaux 0.
    Le problème arrive quand l'utilisateur filtre sur le libellé par exemple.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    select level, t.* from (
       select id_ligne, id_pere, libelle from ma_table
       where libelle like '%BRUT%'
    )t
    START WITH id_pere IS NULL CONNECT BY PRIOR id_ligne = id_pere;
    Le résultat obtenu peut ne comporter que "des fils". La condition START WITH n'est plus rempli. Le résultat de ma requete est vide....

    J'ai bien essayé de bidouiller avec qqchose dans ce genre la :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    START WITH id_pere IS NULL OR 1=1 CONNECT BY PRIOR id_ligne = id_pere;
    Ca m'a pas l'air bien propre...

    Auriez-vous une petite idée ?

    Merci d'avance.

  2. #2
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    Ne suffit-il pas de sortir le WHERE ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT t.* 
      FROM (
               SELECT level, id_ligne, id_pere, libelle
                 FROM ma_table
           START WITH id_pere IS NULL
           CONNECT BY id_pere = PRIOR t.id_ligne
           ) t
     WHERE t.libelle LIKE '%BRUT%';

  3. #3
    Membre confirmé

    Inscrit en
    Décembre 2003
    Messages
    166
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 166
    Par défaut
    Merci pour ta réponse.

    Ca résoud en effet le fait que ma requète soit vide.
    Par contre, ca m'empèche de construire mon arbre par la suite... J'ai des trous dans les niveaux.

    me donne :
    Ce qui est normal en meme temps, tous les noeuds ne remplissent pas les conditions du WHERE....

  4. #4
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    Exactement, la requête telle que je l'ai écrite construit tout l'arbre, puis ensuite filtre les données. Peut-être n'est-ce pas exactement ce dont vous avez besoin.

    Si vous avez un petit exemple !

Discussions similaires

  1. adaptation d'une requete oracle (start with) a sql server (CTE)
    Par ghosty177 dans le forum Développement
    Réponses: 11
    Dernier message: 15/03/2011, 15h54
  2. equivalent de start with-connect by prior d'oracle en sas
    Par tmamy dans le forum Administration et Installation
    Réponses: 1
    Dernier message: 04/09/2009, 12h04
  3. Réponses: 8
    Dernier message: 17/05/2006, 14h32
  4. performance clause like / starting with
    Par KRis dans le forum SQL
    Réponses: 2
    Dernier message: 20/01/2006, 14h42
  5. quel équivalent de start with...connect by prior en DB?
    Par Mittou dans le forum Langage SQL
    Réponses: 5
    Dernier message: 18/10/2005, 14h02

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