Précédent   Forum des professionnels en informatique > Bases de données > Firebird > SQL
SQL Forum d'entraide sur le SQL pour Firebird
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 08/02/2008, 19h22   #1
Membre émérite
 
Homme Olivier Dehorter
Ingenieur de recherche - Ecologue
Inscription : juin 2003
Messages : 701
Détails du profil
Informations personnelles :
Nom : Homme Olivier Dehorter
Localisation : France

Informations professionnelles :
Activité : Ingenieur de recherche - Ecologue

Informations forums :
Inscription : juin 2003
Messages : 701
Points : 845
Points : 845
Par défaut Requete recursive et CTE

Bonjour a tous

depuis la version 2.1, firebird, il est possible d'utiliser les CTE, notamment pour faire des requetes recursives.


j'essaye, mes j'eprouve qq difficultes. par exemples je n'arrive pas a faire apparaitre les resultats !
le mot-cle SUSPEND

Alors comment fait t'on pour faire apparaitre les resultats ?

voici ma table test et procedure test

Code :
1
2
3
4
CREATE TABLE A_TEST (
    ID_PERE    INTEGER,
    ID_ENFANT  INTEGER NOT NULL
);
les donnees

Code :
1
2
3
4
5
INSERT INTO A_TEST (ID_PERE, ID_ENFANT) VALUES (NULL, 1);
INSERT INTO A_TEST (ID_PERE, ID_ENFANT) VALUES (1, 2);
INSERT INTO A_TEST (ID_PERE, ID_ENFANT) VALUES (2, 3);
INSERT INTO A_TEST (ID_PERE, ID_ENFANT) VALUES (1, 4);
INSERT INTO A_TEST (ID_PERE, ID_ENFANT) VALUES (2, 5);
et voici la procedure

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
CREATE PROCEDURE AAAA_TEST (
    Enfant INTEGER)
RETURNS (
    Id_enfant INTEGER,
    Id_pere INTEGER)
AS
begin
 
  WITH recursive test (t_Fils, T_Pere)
  AS
       (SELECT
            A_test.Id_enfant,
            A_test.Id_pere
        FROM
            A_test
       WHERE A_test.Id_pere IS NULL
        UNION ALL
        SELECT Bis.Id_enfant,
            Bis.Id_pere
        FROM
            A_test BIS
                INNER JOIN Test Ter ON (Ter.T_Pere = Bis.Id_enfant)
 )
 
 SELECT t_Fils, t_Pere FROM test
 WHERE test.t_Fils = :enfant
  INTO
     :Id_enfant ,
     :Id_pere
       ;
 
 
end
Et je suis sur que la reponse doit etre triaviale

a+

olivier
dehorter olivier est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/02/2008, 10h47   #2
Membre émérite
 
Homme Olivier Dehorter
Ingenieur de recherche - Ecologue
Inscription : juin 2003
Messages : 701
Détails du profil
Informations personnelles :
Nom : Homme Olivier Dehorter
Localisation : France

Informations professionnelles :
Activité : Ingenieur de recherche - Ecologue

Informations forums :
Inscription : juin 2003
Messages : 701
Points : 845
Points : 845
personne n'a d'idee ?

ou la question est par trop trivale !

a+
olivier
dehorter olivier est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/02/2008, 11h25   #3
Expert Confirmé

 
Homme Philippe Makowski
Consultant spécialité Firebird
Inscription : mai 2002
Messages : 2 215
Détails du profil
Informations personnelles :
Nom : Homme Philippe Makowski
Âge : 49
Localisation : France

Informations professionnelles :
Activité : Consultant spécialité Firebird
Secteur : Conseil

Informations forums :
Inscription : mai 2002
Messages : 2 215
Points : 3 318
Points : 3 318
oui trivial, la requete CTE est comme une autre requete
Mettre une boucle
Code :
1
2
3
4
5
  FOR 
  INTO 
  DO BEGIN
       SUSPEND;
     END
__________________
Philippe Makowski
IBPhoenix - Firebird
Membre de l'April
makowski est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/02/2008, 18h23   #4
Membre émérite
 
Homme Olivier Dehorter
Ingenieur de recherche - Ecologue
Inscription : juin 2003
Messages : 701
Détails du profil
Informations personnelles :
Nom : Homme Olivier Dehorter
Localisation : France

Informations professionnelles :
Activité : Ingenieur de recherche - Ecologue

Informations forums :
Inscription : juin 2003
Messages : 701
Points : 845
Points : 845
Imbecile je suis, je n'avais pas pense inclure dans la boucle FOR INTO
la TOTALITE de la requete CTE...




sorry
dehorter olivier est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 07h41.


 
 
 
 
Partenaires

Hébergement Web