ATOUTFOX
COMMUNAUTÉ FRANCOPHONE DES PROFESSIONNELS FOXPRO
Visual FoxPro : le développement durable

Complement a la Presentation de Jean-Claude Riviere - Donnees recursives en SQL   



L'auteur

Gregory Adam
Belgique Belgique
Membre Actif (personne physique)
# 0000001121
enregistré le 04/06/2006

Fiche personnelle


Note des membres
pas de note

Contributions > 60 - AtoutFox > 2013 - Rencontres - Roissy avec César Chalom

Complement a la Presentation de Jean-Claude Riviere - Donnees recursives en SQL
# 0000000851
ajouté le 22/04/2013 12:06:26 et modifié le 22/04/2013
consulté 4789 fois
Niveau débutant

Version(s) Foxpro :
VFP 9.0


Le téléchargement des pièces jointes est limité aux membres
Veuillez vous identifier ou vous inscrire si vous n'avez pas encore de compte ...
Description

Jean-Claude nous a parle des donnees recursives et la facon de les requeter

Je viens de plonger dedans - un petit resume

Code source :
&& Code en FoxPro - mode iteratif - pour Jean

create cursor People ;
(  p_id  I, ;
  p_name  c(32), ;
  p_parent_id  I null ;
)
index on p_id tag id
insert into People (p_id, p_name, p_parent_id) values (1, 'Jean'null)
for i = 2 to 4
  name = 'Jean_' + padl(m.i-1, 2, '0')

  insert into People (p_id, p_name, p_parent_id) values (m.i, m.name,  1)

  for j = 1 to 3
    name2 = m.name + '_' +padl(m.j, 2, '0')
    insert into People (p_id, p_name, p_parent_id) values (m.i*3 + m.j-2, m.name2,  m.i)
  endfor
endfor

select p_parent_id as Parent, ;
    cast( 0 as intas Level, ;
    p_id as Id, ;
    p_name as name ;
  from People ;
  into cursor Result readwrite ;
  where ( p_parent_id is null)


do while !empty(_Tally)
  insert into Result (ParentLevelIdname) ;
    select p_parent_id, ;
        Level + 1, ;
        p_id, ;
        p_name ;
      from People ;
        join Result on ( Result.Id = People.p_parent_id ) ;
      where not exists ;
        ( ;
          select 1 ;
            from Result ;
            whereId = p_id ) ;
        )
  ?_tally

enddo

Commentaires
le 22/04/2013, Jean à Grenoble a écrit :
En récursivité, on apprend que chaque procédure récursive peut être écrite en mode itératif. Il faudrait vérifier si cela est aussi vrai en SQL ...
le 22/04/2013, Gregory Adam a écrit :
Jean,
J'ai ajoute en FoxPro le mode iteratif

le 22/04/2013, Gregory Adam a écrit :
Pour Francis -

Reponse a ta question pendant la pause

Quand est-ce que cela s'arrete ?

Reponse : Quand il n'y a plus rien a ajouter - regarde le code en foxpro

le 22/04/2013, Francis Faure a écrit :
Gregory,
tu sais bien que j'utilise beaucoup la récursivité :
mais la lecture du code T-SQL présenté était difficile à voir (pour moi) : où est le point de sortie indispensable à toutes procédures récursives.
En version vfp cela est bien lisible.
Cordialement
Francis

le 22/04/2013, Gregory Adam a écrit :
Francis,

Lire http://msdn.microsoft.com/fr-fr/library/ms186243.aspx

- Structure d'une expression CTE recursive : point 3
- Pseudo-code et sémantique : point 4

le 27/04/2013, eddymaue a écrit :
<set humour on>

Jean comme lis-tu çà

1, 'Jean', null

<set humour off>

le 27/04/2013, eddymaue a écrit :
plus sérieusement je ne comprend pas ou se situe la récursivité....

do while !empty(_Tally)
insert into Result (Parent, Level, Id, name) ;
select p_parent_id, ;
Level + 1, ;
p_id, ;
p_name ;
from People ;
join Result on ( Result.Id = People.p_parent_id ) ;
where not exists ;
( ;
select 1 ;
from Result ;
where( Id = p_id ) ;
)
?_tally

enddo


je vois une insertion baser sur une jointure inexistante " where not exists....", c'est là que je me dis que ce n'est qu'itératif !

Comment se produit la récursivité ?

a+ eddy

le 27/04/2013, Gregory Adam a écrit :
Eddy,

Regarde le debut du code

&& Code en FoxPro - mode iteratif - pour Jean


le 28/04/2013, Michel Lévy a écrit :
En complément de ce complément, j'ai trouvé http://www.databasejournal.com/features/mssql/unpack-an-integer-with-sql-server-recursion.html une jolie petite étude 100% SQL sur les calculs de factorielles en mode récursif, avec ou sans CTE.

www.atoutfox.org - Site de la Communauté Francophone des Professionnels FoxPro - v3.4.0 - © 2004-2020.
Cette page est générée par un composant COM+ développé en Visual FoxPro 9.0-SP2-HF3