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

PL/SQL Oracle Discussion :

Fonction PL/SQL / Récursivité


Sujet :

PL/SQL Oracle

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 9
    Points : 10
    Points
    10
    Par défaut Fonction PL/SQL / Récursivité
    Bonsoir à tous, alors voilà je vous explique mon souci.
    Je voudrais créer une fonction récursive en PL/SQL qui me permettrais de récupérer l'identifiant parent, pour un enregistrement donné, l'enregistrement parent, et fils se trouvant dans la même table.

    j'ai une table LISTEVALEUR qui se compose ainsi :

    ID_LISTEVAL (id auto increment)
    VAL (varchar, libellé de la valeur de liste)
    ID_VAL_PARENT (identifiant de la valeur de liste parente ex: 52,64 qui fait référence au ID_LISTEVAL parent)

    alors en fait ce que je voudrais faire, c'est créer une fonction qui boucle jusqu'a tomber sur la valeur parente de plus haut niveau.

    on sait qu'une valeur est parente, quand sont ID_VAL_PARENT vaut '0'

    l'algo de la fonction ressemblerait grosso à ça :


    je récupére l'enregistrement de niveau n+1 à mon enregistrement 12

    SELECT ID_VAL_PAR FROM LISTEVALEUR WHERE ID_LISTVAL='12'

    BOUCLE

    je refais un SELECT sur l'enregistrement n+1 pour trouver son propre ID_VAL_PAR

    FIN BOUCLE quand l'enregistrement sur lequel je me trouve a un ID_VAL_PAR valant 0

    les listes de valeurs on cette tête là :

    ---LISTE PARENTE de 1er niveau---
    1;MOYEN DE TRANSPORT;0
    x;HABITATION;0
    y;PAYS;0


    ---SOUS LISTE de 2éme niveau---
    2;TERRESTRE;1
    3;AERIEN;1
    4;AQUATIQUE;1

    ---SOUS LISTE de 3éme niveau---
    5;VOITURE;2
    6;TRAIN;2
    7;VELO;2

    ---SOUS LISTE de 4éme niveau---
    8;DIESEL;5
    9;ESSENCE;5
    10;GPL;5

    ---SOUS LISTE de 5éme niveau---
    11;SP95;9
    12;SP98;9


    en fait, à partir de l'enregistrement 12 (SP98), j'aimerais retrouver l'enregistrement parent 1 (MOYEN DE TRANSPORT), ne sachant pas trop comment faire en PL SQL, je vous demande un peu d'aide, pour savoir quelle est la meilleure façon de le faire, fonction ? curseurs ?

    merci pour votre aide

  2. #2
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 073
    Points
    19 073
    Par défaut
    Pas besoin de PL/SQL, CONNECT BY PRIOR est fait pour ça

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 9
    Points : 10
    Points
    10
    Par défaut
    Salut et merci pour ton aide
    ta solution a bien marché !!!


    pour ceux qui rencontreraient le même probléme, voilà comment j'ai fait :

    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
     
     
    FUNCTION FCT_GETPARENT(vIdListval IN Number)
    RETURN LISTEVALEUR.VAL%TYPE IS
     
    vParent LISTEVALEUR.VAL%TYPE;
     
    BEGIN
     
    SELECT val
    INTO vParent
    FROM LISTEVALEUR
    WHERE ID_VAL_PARENT='0'
    CONNECT BY PRIOR id_val_parent=id_listeval
    START WITH id_listeval=vIdListval;
     
    RETURN vParent;
    END FCT_GETPARENT;
    Citation Envoyé par orafrance Voir le message
    Pas besoin de PL/SQL, CONNECT BY PRIOR est fait pour ça

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

Discussions similaires

  1. Fonction sous SQL Server
    Par GeffD dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 08/04/2005, 11h32
  2. fonction DATEADD [SQL SERVER]
    Par HULK dans le forum Langage SQL
    Réponses: 4
    Dernier message: 28/12/2004, 17h33
  3. Réponses: 6
    Dernier message: 24/12/2004, 16h46
  4. [PostgreSQL] fonction pl/sql
    Par sam54 dans le forum Requêtes
    Réponses: 2
    Dernier message: 28/05/2003, 16h09
  5. - fonction Transact-SQL...
    Par korrigann dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 22/05/2003, 15h00

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