Précédent   Forum des professionnels en informatique > Systèmes > Autres systèmes > AS/400
AS/400 Le Forum d'entraide sur IBM AS/400 - iSeries. RPG.
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 20/06/2011, 16h14   #1
Nouveau Membre du Club
 
Homme Thomas
Architecte technique
Inscription : septembre 2010
Messages : 39
Détails du profil
Informations personnelles :
Nom : Homme Thomas
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Activité : Architecte technique

Informations forums :
Inscription : septembre 2010
Messages : 39
Points : 39
Points : 39
Par défaut [V6R1] - [SQLRPGLE] - Fetch sur jointure dans une DS externe

Bonjour à tous.

Dans un SQLRPGLE, je cherche à :
  1. déclarer un curseur dans lequel il y a une jointure sur 2 tables avec sélection de tous les champs pour chacune des tables
  2. faire un fetch du curseur dans une(des?) variable(s) externe(s) contenant les champs des deux tables
Exemple de source :
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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
     h decedit  ( '0,' )
     h datfmt   ( *iso )
     h datedit  ( *dmy.)
     h timfmt   ( *iso )
     h debug
     h option   ( *nodebugio :
     h            *srcstmt )

     d dpllot...
     d               e ds                  extname( dpllot )
     d                                     qualified
     d                                     inz
     d                                     template

     d dplvrs...
     d               e ds                  extname( dplvrs )
     d                                     qualified
     d                                     inz
     d                                     template

     d LenregFetch...
     d                 ds                  qualified
     d                                     dim( 10 )
     d  dsdplvrs                           likeds( dplvrs )
     d  dsdpllot                           likeds( dpllot )

      /free

       exec sql
         declare c1 insensitive no scroll cursor without return for
           select v.*,
                  l.*
             from dplvrs v inner
             join dpllot l on v.idlot = l.id
             order by numvrs
             for read only
             optimize for 10 rows ;

       exec sql
         open c1 ;

       exec sql
         fetch next from c1 for 10 rows into :lenregfetch ;

       exec sql
         close c1 ;

       *inlr = *on ;
       return ;

      /end-free
Le pré-compilateur SQL me sert cette erreur :
SQL5011 30 43 Position 46 Le tableau de structure hôte LENREGFETCH n'est pas défini ou est inutilisable.

Actuellement, ma seule piste est de créer une vue afin d'avoir une définition de DS externe contenant les deux formats, mais je ne trouve pas cela très "propre".

Quelqu'un sait-il comment je peux faire pour résoudre mon problème ?

Merci de vos réponses.
pwrdwnsys est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/06/2011, 17h17   #2
Membre Expert
 
Inscription : novembre 2004
Messages : 1 298
Détails du profil
Informations forums :
Inscription : novembre 2004
Messages : 1 298
Points : 1 355
Points : 1 355
Je pense que tu pourrais "fetcher" zone à zone dans la DS LENREGFETCH mais tu perdrais l'avantage du fetch multiple. Néanmoins, la solution de la vue me paraît correcte. Pourquoi serait-elle "sale" ?
Mercure est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/06/2011, 18h01   #3
Nouveau Membre du Club
 
Homme Thomas
Architecte technique
Inscription : septembre 2010
Messages : 39
Détails du profil
Informations personnelles :
Nom : Homme Thomas
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Activité : Architecte technique

Informations forums :
Inscription : septembre 2010
Messages : 39
Points : 39
Points : 39
Citation:
Envoyé par Mercure Voir le message
Néanmoins, la solution de la vue me paraît correcte. Pourquoi serait-elle "sale" ?
La solution de la vue fonctionne effectivement très bien (c'est ce que j'ai fait en attendant, pour avancer).
Le côté "sale", c'est que je crée un objet uniquement pour pouvoir compiler mon programme... Car je ne suis pas obligé de l'utiliser pour faire mes requêtes.
pwrdwnsys est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/06/2011, 23h52   #4
Membre Expert
 
Inscription : novembre 2004
Messages : 1 298
Détails du profil
Informations forums :
Inscription : novembre 2004
Messages : 1 298
Points : 1 355
Points : 1 355
Sans garantie, j'essaierais comme suit :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
     d EnregFetch...
     d                 ds                  qualified
     d                                     dim( 10 )
     d  dsdplvrs                           likeds( dplvrs )
     d  dsdpllot                           likeds( dpllot )
     d                                     template

puis

     d LenregFetch...
     d                 ds                  qualified
     d                                     dim( 10 )
     d  dsdplvrsllot                       likeds( EnregFetch )
Mercure est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/06/2011, 08h49   #5
Nouveau Membre du Club
 
Homme Thomas
Architecte technique
Inscription : septembre 2010
Messages : 39
Détails du profil
Informations personnelles :
Nom : Homme Thomas
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Activité : Architecte technique

Informations forums :
Inscription : septembre 2010
Messages : 39
Points : 39
Points : 39
Ça ne fonctionne pas . Le message est le même.
Mais finalement, je pense que la solution de la vue est satisfaisante, car ce n'est pas comme si c'était un index à maintenir à chaque mouvement sur la table, ça n'a donc pas d'impact sur les performances...
Merci de tes réponses.
pwrdwnsys 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 22h33.


 
 
 
 
Partenaires

Hébergement Web