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 20/01/2011, 17h15   #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 [DB2] [i5OS] [V6R1] - Clause ORDER BY dynamique

Bonjour.

Je cherche à faire une clause ORDER BY dynamique dans une requête embarquée dans du RPGLE (j'essaie de faire une requête statique, sinon, en dynamique, ça ne pose aucun problème...).


Ce que j'ai essayé :


Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
 
EXEC SQL
  DECLARE evenement CURSOR FOR
  SELECT *
  FROM tsevtcp0
  WHERE yctopr = ' ' AND
                   ycsrrs =
          CASE :zcsgp
            WHEN ' ' THEN ycsrrs
            ELSE :zcsgp
          END
  ORDER BY
    CASE :wcvue
      WHEN 'S' THEN ycsrrs, ycgprs, ycmet, ycodc, ydpre, ydrea, ycmoe, ycsmo
      ELSE ycsrrs, ycgprs, ycusrs, ycmet, ycodc, ydpre, ydrea, ycmoe, ycsmo
    END ASC
  FOR READ ONLY
  OPTIMIZE FOR ALL ROWS ;

Mais RDp me jette gentiment sur le CASE dans le ORDER BY :
Code :
1
2
3
SQL0104 Elément syntaxique , n'est pas correct. Eléments possibles : END
Savez-vous si SQL pour I5OS est bien toujours le parent pauvre de DB2 et que ce que je veux faire n'est pas possible ou y'a-t-il un moyen d'arriver à mon résultat ?

Merci de vos conseils.
pwrdwnsys est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/01/2011, 20h10   #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
Essaie çà :
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
 
...
 ORDER BY
 
    CASE :wcvue = 'S'
      THEN ycsrrs                      
      ELSE  ycsrrs
    END
 
    CASE :wcvue = 'S'
      THEN ycgprs                     
      ELSE  ycgprs
    END
 
    CASE :wcvue = 'S'
      THEN ycmet                     
      ELSE  ycusrs
    END
 
     CASE :wcvue = 'S'
      THEN ycodc                      
      ELSE  ycmet
    END
 
    CASE :wcvue = 'S'
      THEN ydpre                      
      ELSE  ycodc
    END
 
    CASE :wcvue = 'S'
      THEN ydrea                      
      ELSE  ydpre
    END
 
    CASE :wcvue = 'S'
      THEN ycmoe                     
      ELSE  ycmoe
    END
 
    CASE :wcvue = 'S'
      THEN ycsmo                    
      ELSE  ycsmo
    END
...
Mercure est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/01/2011, 11h46   #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
Merci Mercure, ça fonctionne. Partant de ce principe de codage (fort peu intuitif, je trouve), je suis arrivé à cela :
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
 
        EXEC SQL
          DECLARE evenements NO SCROLL CURSOR WITHOUT RETURN FOR
            SELECT *
              FROM tsevtcp0
              WHERE     yctopr = ' '
                    AND ycsrrs LIKE
                      CASE :zcsgp
                        WHEN '___' THEN ycsrrs
                        ELSE :zcsgp
                      END
                    AND ycgprs LIKE
                      CASE :zcgrp
                        WHEN '___' THEN ycgprs
                        ELSE :zcgrp
                      END
              ORDER BY ycsrrs, ycgprs,
                       CASE :wcvue
                         WHEN 'S' THEN ' '
                         ELSE ycusrs
                       END ,
                       ycmet, ycodc, ydpre, ydrea, ycmoe, ycsmo
              FOR READ ONLY
              OPTIMIZE FOR ALL ROWS ;
Je ne sais pas comment indiquer directement un équivalent de "WHEN <> 'S'...
Merci encore.
pwrdwnsys est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/01/2011, 14h39   #4
Expert Confirmé
 
Homme
Inscription : mai 2002
Messages : 1 638
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 29
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : mai 2002
Messages : 1 638
Points : 2 630
Points : 2 630
Bonjour,


Code sql :
1
2
3
4
 
CASE WHEN (MaVar <> 'MonTest') THEN ...
ELSE ...
END
punkoff est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/01/2011, 17h07   #5
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
Bonjour les perfs avec tous ces LIKE, CASE et ORDER BY ! A tous les coups, c'est CQE le vieux moteur qui sera le maître du jeu là-dedans.
Mercure est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/01/2011, 17h55   #6
Expert Confirmé
 
Homme
Inscription : mai 2002
Messages : 1 638
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 29
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : mai 2002
Messages : 1 638
Points : 2 630
Points : 2 630
pas en v6r1 pour CQE, pour le reste oui y a des chance
punkoff est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/01/2011, 11h38   #7
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
Merci pour les réponses.

Citation:
Envoyé par Mercure Voir le message
Bonjour les perfs avec tous ces LIKE, CASE et ORDER BY ! A tous les coups, c'est CQE le vieux moteur qui sera le maître du jeu là-dedans.
Après différents tests, je vais revenir à du SQL dynamique, pour des raisons des performances...
Du coup, je n'ai plus de problème de syntaxe. Mais j'ai des solutions pour plus tard.
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 00h16.


 
 
 
 
Partenaires

Hébergement Web