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

DB2 Discussion :

[AS400] Procédure et récursivité


Sujet :

DB2

  1. #1
    Membre habitué
    Inscrit en
    Juin 2004
    Messages
    213
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 213
    Points : 154
    Points
    154
    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

  2. #2
    jab
    jab est déconnecté
    Rédacteur
    Avatar de jab
    Homme Profil pro
    SharePoint developpeur
    Inscrit en
    Février 2004
    Messages
    1 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Belgique

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

    Informations forums :
    Inscription : Février 2004
    Messages : 1 173
    Points : 4 339
    Points
    4 339
    Par défaut
    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.

  3. #3
    Membre habitué
    Inscrit en
    Juin 2004
    Messages
    213
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 213
    Points : 154
    Points
    154
    Par défaut
    Merci jab pour ta réponse merci oui je veu bien une explication kan tu aura le temps

  4. #4
    jab
    jab est déconnecté
    Rédacteur
    Avatar de jab
    Homme Profil pro
    SharePoint developpeur
    Inscrit en
    Février 2004
    Messages
    1 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Belgique

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

    Informations forums :
    Inscription : Février 2004
    Messages : 1 173
    Points : 4 339
    Points
    4 339
    Par défaut
    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 ?

  5. #5
    Membre habitué
    Inscrit en
    Juin 2004
    Messages
    213
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 213
    Points : 154
    Points
    154
    Par défaut
    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

  6. #6
    jab
    jab est déconnecté
    Rédacteur
    Avatar de jab
    Homme Profil pro
    SharePoint developpeur
    Inscrit en
    Février 2004
    Messages
    1 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Belgique

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

    Informations forums :
    Inscription : Février 2004
    Messages : 1 173
    Points : 4 339
    Points
    4 339
    Par défaut
    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

  7. #7
    Membre habitué
    Inscrit en
    Juin 2004
    Messages
    213
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 213
    Points : 154
    Points
    154
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    CALL maproc(num_art) ou 
    CALL QSYS/QCMDEXC('CALL maproc(num_art)')
    Merci d'avance

  8. #8
    Membre habitué
    Inscrit en
    Juin 2004
    Messages
    213
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 213
    Points : 154
    Points
    154
    Par défaut
    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

  9. #9
    Membre régulier
    Inscrit en
    Avril 2004
    Messages
    85
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Avril 2004
    Messages : 85
    Points : 89
    Points
    89
    Par défaut
    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.

  10. #10
    jab
    jab est déconnecté
    Rédacteur
    Avatar de jab
    Homme Profil pro
    SharePoint developpeur
    Inscrit en
    Février 2004
    Messages
    1 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Belgique

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

    Informations forums :
    Inscription : Février 2004
    Messages : 1 173
    Points : 4 339
    Points
    4 339
    Par défaut
    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.

  11. #11
    Membre régulier
    Inscrit en
    Avril 2004
    Messages
    85
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Avril 2004
    Messages : 85
    Points : 89
    Points
    89
    Par défaut
    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é...

  12. #12
    jab
    jab est déconnecté
    Rédacteur
    Avatar de jab
    Homme Profil pro
    SharePoint developpeur
    Inscrit en
    Février 2004
    Messages
    1 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Belgique

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

    Informations forums :
    Inscription : Février 2004
    Messages : 1 173
    Points : 4 339
    Points
    4 339
    Par défaut
    Bon à tester convenablement mais si j'ai bien compri cela devrait convenir
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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]

  13. #13
    Membre régulier
    Inscrit en
    Avril 2004
    Messages
    85
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Avril 2004
    Messages : 85
    Points : 89
    Points
    89
    Par défaut
    Merci beaucoup, je teste cela tout de suite !

  14. #14
    Membre régulier
    Inscrit en
    Avril 2004
    Messages
    85
    Détails du profil
    Informations personnelles :
    Âge : 40

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

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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.

  15. #15
    jab
    jab est déconnecté
    Rédacteur
    Avatar de jab
    Homme Profil pro
    SharePoint developpeur
    Inscrit en
    Février 2004
    Messages
    1 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Belgique

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

    Informations forums :
    Inscription : Février 2004
    Messages : 1 173
    Points : 4 339
    Points
    4 339
    Par défaut
    En effet.
    Il faudra attendre une version ultérieure.

  16. #16
    Membre régulier
    Inscrit en
    Avril 2004
    Messages
    85
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Avril 2004
    Messages : 85
    Points : 89
    Points
    89
    Par défaut
    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

  17. #17
    jab
    jab est déconnecté
    Rédacteur
    Avatar de jab
    Homme Profil pro
    SharePoint developpeur
    Inscrit en
    Février 2004
    Messages
    1 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : Belgique

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

    Informations forums :
    Inscription : Février 2004
    Messages : 1 173
    Points : 4 339
    Points
    4 339
    Par défaut
    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 ...

Discussions similaires

  1. Problème de récursivité dans une procédure stockée
    Par tsmp19 dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 04/09/2009, 19h20
  2. [AS400] Appel d'une procédure stockée
    Par Portekoi dans le forum DB2
    Réponses: 55
    Dernier message: 26/11/2008, 10h01
  3. Réponses: 1
    Dernier message: 04/03/2007, 15h40
  4. [AS400] Comment faire des procédures stockées ?
    Par marsup54 dans le forum DB2
    Réponses: 6
    Dernier message: 22/08/2005, 15h34
  5. [AS400]Procédure stockée
    Par stujava dans le forum Autres SGBD
    Réponses: 2
    Dernier message: 08/07/2005, 12h26

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