Précédent   Forum des professionnels en informatique > Bases de données > DB2
DB2 Forum d'entraide technique sur la base de données DB2. Voir aussi -> Rubrique DB2
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 16/02/2006, 16h47   #1
Membre habitué
 
Inscription : juin 2004
Messages : 212
Détails du profil
Informations forums :
Inscription : juin 2004
Messages : 212
Points : 118
Points : 118
Par défaut [AS400] Procédure et récursivité

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
yoyopi est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/02/2006, 21h37   #2
jab
Rédacteur
 
Avatar de jab
 
Homme Jean-Alain Baeyens
SharePoint developpeur
Inscription : février 2004
Messages : 1 172
Détails du profil
Informations personnelles :
Nom : Homme Jean-Alain Baeyens
Âge : 48
Localisation : Belgique

Informations professionnelles :
Activité : SharePoint developpeur
Secteur : Service public

Informations forums :
Inscription : février 2004
Messages : 1 172
Points : 3 131
Points : 3 131
Envoyer un message via ICQ à jab Envoyer un message via MSN à jab Envoyer un message via Skype™ à jab
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.
jab est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/02/2006, 21h40   #3
Membre habitué
 
Inscription : juin 2004
Messages : 212
Détails du profil
Informations forums :
Inscription : juin 2004
Messages : 212
Points : 118
Points : 118
Merci jab pour ta réponse merci oui je veu bien une explication kan tu aura le temps
yoyopi est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/02/2006, 17h32   #4
jab
Rédacteur
 
Avatar de jab
 
Homme Jean-Alain Baeyens
SharePoint developpeur
Inscription : février 2004
Messages : 1 172
Détails du profil
Informations personnelles :
Nom : Homme Jean-Alain Baeyens
Âge : 48
Localisation : Belgique

Informations professionnelles :
Activité : SharePoint developpeur
Secteur : Service public

Informations forums :
Inscription : février 2004
Messages : 1 172
Points : 3 131
Points : 3 131
Envoyer un message via ICQ à jab Envoyer un message via MSN à jab Envoyer un message via Skype™ à jab
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 ?
jab est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/02/2006, 09h01   #5
Membre habitué
 
Inscription : juin 2004
Messages : 212
Détails du profil
Informations forums :
Inscription : juin 2004
Messages : 212
Points : 118
Points : 118
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
yoyopi est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/02/2006, 16h01   #6
jab
Rédacteur
 
Avatar de jab
 
Homme Jean-Alain Baeyens
SharePoint developpeur
Inscription : février 2004
Messages : 1 172
Détails du profil
Informations personnelles :
Nom : Homme Jean-Alain Baeyens
Âge : 48
Localisation : Belgique

Informations professionnelles :
Activité : SharePoint developpeur
Secteur : Service public

Informations forums :
Inscription : février 2004
Messages : 1 172
Points : 3 131
Points : 3 131
Envoyer un message via ICQ à jab Envoyer un message via MSN à jab Envoyer un message via Skype™ à jab
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
jab est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/02/2006, 16h15   #7
Membre habitué
 
Inscription : juin 2004
Messages : 212
Détails du profil
Informations forums :
Inscription : juin 2004
Messages : 212
Points : 118
Points : 118
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 :
1
2
3
 
maproc(IN var1 integer,OUT var2 IN)
CALL maproc(5,?????)
Mais on met quoi à la place des ??????

-comment appeler une procédure à partir d'une autre procédure?
Code :
1
2
CALL maproc(num_art) ou 
CALL QSYS/QCMDEXC('CALL maproc(num_art)')
Merci d'avance
yoyopi est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/03/2006, 09h12   #8
Membre habitué
 
Inscription : juin 2004
Messages : 212
Détails du profil
Informations forums :
Inscription : juin 2004
Messages : 212
Points : 118
Points : 118
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
yoyopi est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/05/2006, 16h36   #9
Membre du Club
 
Inscription : avril 2004
Messages : 85
Détails du profil
Informations personnelles :
Âge : 28

Informations forums :
Inscription : avril 2004
Messages : 85
Points : 62
Points : 62
Citation:
Envoyé par jab
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/infoce...65%6e%74%22%20
Cette solution m'interresserait bien, mais j'ai un peu de mal à tout saisir. Si quelqu'un pouvait m'eclaicir sur le sujet. Car j'aurais besoin de faire de la recursivité et cette solution me parait pratique.
aicfr est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/05/2006, 21h21   #10
jab
Rédacteur
 
Avatar de jab
 
Homme Jean-Alain Baeyens
SharePoint developpeur
Inscription : février 2004
Messages : 1 172
Détails du profil
Informations personnelles :
Nom : Homme Jean-Alain Baeyens
Âge : 48
Localisation : Belgique

Informations professionnelles :
Activité : SharePoint developpeur
Secteur : Service public

Informations forums :
Inscription : février 2004
Messages : 1 172
Points : 3 131
Points : 3 131
Envoyer un message via ICQ à jab Envoyer un message via MSN à jab Envoyer un message via Skype™ à jab
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.
jab est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/05/2006, 09h51   #11
Membre du Club
 
Inscription : avril 2004
Messages : 85
Détails du profil
Informations personnelles :
Âge : 28

Informations forums :
Inscription : avril 2004
Messages : 85
Points : 62
Points : 62
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é...
aicfr est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/05/2006, 13h28   #12
jab
Rédacteur
 
Avatar de jab
 
Homme Jean-Alain Baeyens
SharePoint developpeur
Inscription : février 2004
Messages : 1 172
Détails du profil
Informations personnelles :
Nom : Homme Jean-Alain Baeyens
Âge : 48
Localisation : Belgique

Informations professionnelles :
Activité : SharePoint developpeur
Secteur : Service public

Informations forums :
Inscription : février 2004
Messages : 1 172
Points : 3 131
Points : 3 131
Envoyer un message via ICQ à jab Envoyer un message via MSN à jab Envoyer un message via Skype™ à jab
Bon à tester convenablement mais si j'ai bien compri cela devrait convenir
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
WITH
   TEMP (ensemble, sousensemble) AS
   (
      SELECT main.ensemble, main.sousensemble
         FROM test.recettes main
      UNION ALL
      SELECT parent.ensemble, enfant.sousensemble
         FROM TEMP parent, test.recettes enfant
         WHERE parent.sousensemble = enfant.ensemble
   )
   SELECT ensemble, count(*)
      FROM TEMP
      GROUP BY ensemble
[MODE EDIT]

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 :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 
WITH
   TEMP (level,ensemble, sousensemble) AS
   (
      SELECT 0,main.ensemble, main.sousensemble
         FROM test.recettes main
      UNION ALL
      SELECT parent.level+1,parent.ensemble, enfant.sousensemble
         FROM TEMP parent, test.recettes enfant
         WHERE parent.sousensemble = enfant.ensemble
           ANDparent.level < 10
   )
   SELECT ensemble, count(*)
      FROM TEMP
      GROUP BY ensemble
[/MODE EDIT]
jab est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/05/2006, 09h30   #13
Membre du Club
 
Inscription : avril 2004
Messages : 85
Détails du profil
Informations personnelles :
Âge : 28

Informations forums :
Inscription : avril 2004
Messages : 85
Points : 62
Points : 62
Merci beaucoup, je teste cela tout de suite !
aicfr est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/05/2006, 10h09   #14
Membre du Club
 
Inscription : avril 2004
Messages : 85
Détails du profil
Informations personnelles :
Âge : 28

Informations forums :
Inscription : avril 2004
Messages : 85
Points : 62
Points : 62
Apres essai de ta solution, celle-ci ne fonctionne pas. Voici le message d'erreur que j'obtiens:

Code :
1
2
3
4
5
6
 
[SQL0346] Récursivité non admise pour les expressions de TABLES communes.
...
Modifiez les expressions de TABLES communes afin qu'elles fassent
référence à une table existante ou à une expression de table commune
déjà définie.
Apres une recherche sur internet sur le code d'erreur, je suis tombé sur ceci:

Code :
1
2
3
 
Recursive common TABLE expressions are NOT currently supported BY DB2
UDB FOR iSeries...
Etant donné que je suis actuellement sur iSeries, je pense que je ne peut pas utiliser la claude WITH.
aicfr est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/05/2006, 11h02   #15
jab
Rédacteur
 
Avatar de jab
 
Homme Jean-Alain Baeyens
SharePoint developpeur
Inscription : février 2004
Messages : 1 172
Détails du profil
Informations personnelles :
Nom : Homme Jean-Alain Baeyens
Âge : 48
Localisation : Belgique

Informations professionnelles :
Activité : SharePoint developpeur
Secteur : Service public

Informations forums :
Inscription : février 2004
Messages : 1 172
Points : 3 131
Points : 3 131
Envoyer un message via ICQ à jab Envoyer un message via MSN à jab Envoyer un message via Skype™ à jab
En effet.
Il faudra attendre une version ultérieure.
jab est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/05/2006, 15h04   #16
Membre du Club
 
Inscription : avril 2004
Messages : 85
Détails du profil
Informations personnelles :
Âge : 28

Informations forums :
Inscription : avril 2004
Messages : 85
Points : 62
Points : 62
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
aicfr est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/05/2006, 15h40   #17
jab
Rédacteur
 
Avatar de jab
 
Homme Jean-Alain Baeyens
SharePoint developpeur
Inscription : février 2004
Messages : 1 172
Détails du profil
Informations personnelles :
Nom : Homme Jean-Alain Baeyens
Âge : 48
Localisation : Belgique

Informations professionnelles :
Activité : SharePoint developpeur
Secteur : Service public

Informations forums :
Inscription : février 2004
Messages : 1 172
Points : 3 131
Points : 3 131
Envoyer un message via ICQ à jab Envoyer un message via MSN à jab Envoyer un message via Skype™ à jab
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 ...
jab est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 19h48.


 
 
 
 
Partenaires

Hébergement Web