|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Membre habitué
![]() Inscription : juin 2004 Messages : 212 ![]() |
Bonjour,
Je voudrais savoir si DB2 offre la possibilité de faire de la récursivité avec une procédure(ou une fonction)? Je suis sous AS400 Merci à tous |
|
|
00
|
|
|
#2 |
![]() ![]() |
Oui tu peux faire de la récursivité.
La je n'ai pas le temps de t'expliquer mais je t'envoi un exmple demain si cela t'interesse. Par contre je dois vérifier si c'est dispo pour l'AS400. |
|
00
|
|
|
#3 |
|
Membre habitué
![]() Inscription : juin 2004 Messages : 212 ![]() |
Merci jab pour ta réponse merci oui je veu bien une explication kan tu aura le temps
|
|
|
00
|
|
|
#4 |
![]() ![]() |
Je me suis peut être un peu avançé car j'ai lu trop rapidement ta question.
Oui DB2 permet la récursivité dans une procédure mais j'avoue je n'ai jamais essayé. Sinon, il y a le SQL récursif. C'est ce que j'avais à l'esprit en te répondant. Que cherches tu à faire ? |
|
00
|
|
|
#5 |
|
Membre habitué
![]() Inscription : juin 2004 Messages : 212 ![]() |
En fait ce que je voudrais faire c'est que ma fonction puisse se rapelé elle même.
Car en fait lorsque j'ai un article, celui ci possède des composants et pour chaque article je dois verifier une propriété du composant donc je dois rapeller la même fonction en boucle jusqu'à ce qu'il n'y ait plus de composant |
|
|
00
|
|
|
#6 |
![]() ![]() |
Je pense que tu peux le faire mais tu peux aussi utiliser le recursive SQL, il te permettra de récupéré le résultat comme s'il venait d'un seul SELECT avec le composé et tout ses composant. C'est justement pour faire cela que cette commande existe et je pense que c'est beaucoup plus rapide qu'avec une procédure récursive.
Tu as un exemple à cette page. http://publib.boulder.ibm.com/infocenter/db2luw/v8/topic/com.ibm.db2.udb.doc/admin/r0000879.htm?resultof=%22%73%65%6c%65%63%74%22%20%22%6d%61%69%6e%22%20%22%63%68%69%6c%64%22%20%22%70%61%72%65%6e%74%22%20 |
|
00
|
|
|
#7 | ||||
|
Membre habitué
![]() Inscription : juin 2004 Messages : 212 ![]() |
Merci jab mais je ne pense pas que je vais utilisé ça! Mais merci quand même c'est très intérréssant.
Je voudrais savoir comment faire pour : - executer une procédure qui possède un paramètre IN et un paramètre OUT? Code :
-comment appeler une procédure à partir d'une autre procédure? Code :
|
||||
|
|
00
|
|
|
#8 |
|
Membre habitué
![]() Inscription : juin 2004 Messages : 212 ![]() |
Pour ceux qui aurait le même problème j'ai expliquer mes recherches sur ce topic :
http://www.developpez.net/forums/vie...661549#2661549 |
|
|
00
|
|
|
#9 | |
|
Membre du Club
![]() Inscription : avril 2004 Messages : 85 ![]() |
Citation:
|
|
|
|
00
|
|
|
#10 |
![]() ![]() |
Explique ce que gu veux faire. si tu as déjà fait un bou de code donne le aussi. Ce sera plus fcile pour donner une explication sur un cas concret.
|
|
00
|
|
|
#11 |
|
Membre du Club
![]() Inscription : avril 2004 Messages : 85 ![]() |
Pour l'instant, le seul code que j'ai pu produire est une suite de boucles imbriquées, qui, à mon avis, n'est ni performant, ni esthétique, ni facile à relire, etc...
Je vais tenter d'expliquer ce que je dois essayer de faire. Je possede une table contenant un certain nombres d'enregistrements sous cette forme: ensemble | sous ensemble ------------------------- 2110 | 2134 2110 | 2135 2110 | 2136 2134 | 2137 2135 | 2150 2136 | 2151 Ce que je voudrais trouver, c'est le nombre de sous ensembles qui compose un ensemble, sachant bien evidement, qu'un sous ensemble, est aussi un ensemble. Je ne sais pas si la methode avec WITH peut repondre a cette problematique. Les requetes imbriquées marchent, et je vais essayé de rechercher un peu du coté de la recursivité... |
|
|
00
|
|
|
#12 | ||||
![]() ![]() |
Bon à tester convenablement mais si j'ai bien compri cela devrait convenir
Code :
Le même mais avec un contrôle sur le nombre de niveau maximum pour éviter une boucle infinie par exemple. J'ai mis 10 mais à toi de voir selon le nombre réelle maximum de niveau. Code :
|
||||
|
00
|
|
|
#13 |
|
Membre du Club
![]() Inscription : avril 2004 Messages : 85 ![]() |
Merci beaucoup, je teste cela tout de suite !
|
|
|
00
|
|
|
#14 | ||||
|
Membre du Club
![]() Inscription : avril 2004 Messages : 85 ![]() |
Apres essai de ta solution, celle-ci ne fonctionne pas. Voici le message d'erreur que j'obtiens:
Code :
Code :
|
||||
|
|
00
|
|
|
#15 |
![]() ![]() |
En effet.
Il faudra attendre une version ultérieure.
|
|
00
|
|
|
#16 |
|
Membre du Club
![]() Inscription : avril 2004 Messages : 85 ![]() |
Je ne comprend pas vraiment pourquoi on ne pas utiliser la clause WITH sur iSeries. As tu une explication ?
Sinon, pour completer ce que tu as deja dis, je met l'adresse d'un article traitant la clause WITH. Celui-ci est illustré par exemple qui permet une assez bonne comprehension. http://www-128.ibm.com/developerwork...venigalla.html |
|
|
00
|
|
|
#17 |
![]() ![]() |
En fait les moteur z/os, iSeries et Windows/Linux sont totalement différents. Les développements se font plus ou moins en parallèle mais il semble que la plateform Linux/Windows soit plus avançées. Probablement car étant la petite dernière, elle bénéficie du fait que plus de choses on pu être prévues à la base. Peut être aussi parceque la concurence est plus intense sur ce segment. Mais il s'agit d'un avis personnel que j'émet sur base de renseignements très lacunaires donc ...
|
|
00
|
Copyright © 2000-2012 - www.developpez.com