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

Requêtes PostgreSQL Discussion :

WITH RECURSIVE PATH QUERY


Sujet :

Requêtes PostgreSQL

Mode arborescent

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    254
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 254
    Par défaut WITH RECURSIVE PATH QUERY
    Bonjour
    J'ai un souci avec la génération du chemin de l'arbre (cf. path dans la doc postgres).
    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
     
    CREATE TABLE domaine (
      id CHAR(25) NOT NULL,
      nom CHAR(35) NULL,
      parent CHAR(25) NULL,  
      PRIMARY KEY(id),  
      FOREIGN KEY(parent)REFERENCES Domaine(id)
          ON DELETE CASCADE
          ON UPDATE CASCADE
    );
    insert into domaine values ('1', 'pA', null);
    insert into domaine values ('2', 'pB', '2');
    insert into domaine values ('11', 'eA1', '1');
    insert into domaine values ('12', 'eA2', '1');
    insert into domaine values ('13', 'eA3', '1');
    insert into domaine values ('21', 'eB1', '2');
    insert into domaine values ('22', 'eB2', '2');
    insert into domaine values ('23', 'eB3', '2');
    insert into domaine values ('11-1', 'eeA1', '11');
    insert into domaine values ('11-2', 'eeA1', '11');
    Ensuite la requête basique fonctionne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    WITH recursive enfant(idEnfant,nomEnfant,level) AS
    (
         SELECT d.id,d.nom,1 
         FROM domaine d WHERE d.id='1'  
       union all
         SELECT d.id,d.nom,(e.level+1)
    	 FROM domaine d,enfant e 
    	 WHERE d.parent=e.idEnfant 
    	 )
    SELECT * FROM enfant ORDER BY level;
    le résultat est dans la PJ resRecOK.png.

    par contre je n'arrive pas à faire fonctionner la requête inspirée de la doc PostgreSql, et intégrant la génération du chemin :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    WITH recursive enfant(idEnfant,nomEnfant,level, path, cycle) AS
    (
         SELECT d.id,d.nom,1 , ARRAY[d.id ], false
         FROM domaine d WHERE d.id='1'  
       union all
         SELECT d.id,d.nom,(e.level+1), path ||d.id , d.id=ANY(path)
    	 FROM domaine d, enfant e 
    	 WHERE d.parent=e.idEnfant 
    	 )
    SELECT * FROM enfant ORDER BY level;
    L'erreur est :
    ERROR: recursive query "enfant" column 4 has type character(25)[] in non-recursive term but type bpchar[] overall
    LINE 3: SELECT d.id,d.nom,1 , ARRAY[d.id ], false
    ^
    HINT: Cast the output of the non-recursive term to the correct type.
    cf. la PJ : resRecKO.png

    Je dois mal utiliser le type ARRAY, pouvez-vous m'éclairer ?
    Images attachées Images attachées   

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

Discussions similaires

  1. With recursive - Divers problèmes
    Par Gecko dans le forum Requêtes
    Réponses: 0
    Dernier message: 08/09/2011, 08h46
  2. Réponses: 2
    Dernier message: 23/08/2011, 23h22
  3. 2 problèmes avec with recursive et case
    Par fabienazerty dans le forum Requêtes
    Réponses: 4
    Dernier message: 02/11/2009, 09h50
  4. Requete recursive avec WITH
    Par Kuroro dans le forum MS SQL Server
    Réponses: 10
    Dernier message: 06/09/2007, 23h05
  5. WITH RECURSIVE
    Par Médiat dans le forum Décisions SGBD
    Réponses: 3
    Dernier message: 16/06/2005, 09h17

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