CEC 2012 Vienna Forum Francophone Power IBM i ( et AS/400, iSeries, System i, ... )
Forum Francophone Power IBM i ( et AS/400, iSeries, System i,  ... )   Forum Francophone Power IBM i ( et AS/400, iSeries, System i,  ... )   Forum Francophone Power IBM i ( et AS/400, iSeries, System i,  ... )   Forum Francophone Power IBM i ( et AS/400, iSeries, System i,  ... )
18 Mai,2012, 20:51:36 *
Bienvenue, Invité. Veuillez vous connecter ou vous inscrire.
Avez-vous perdu votre courriel d'activation?

Connexion avec identifiant, mot de passe et durée de la session
Nouvelles:
 
   Accueil   Aide Règles Rechercher Partenaires Identifiez-vous Inscrivez-vous Liens Common France Common Belgique Common Luxembourg  
Pages: [1]   Bas de page
  Imprimer  
Auteur Fil de discussion: [RPG] Plein de nouvelles fonctions en RPG III et IV !  (Lu 1396 fois) Average Rating: 5
0 Membres et 1 Invité sur ce fil de discussion.
jmpenasse
Administrator
Membre Héroïque
*****
Hors ligne Hors ligne

Messages: 344




i_SilverDev http://fr.linkedin.com/in/jmpenasse
Voir le profil WWW
« le: 26 Janvier,2009, 00:35:59 »

Nous n'avons jamais assez de fonctions toutes prêtes pour écrire nos programmes !
Le RPG/400 (aka RPG III) est d'une pauvreté aujourd'hui affligeante, mais, bien heureusement, le RPG IV nous en a apporté bon nombre qui nous simplifient bien le travail, sans compter la possibilité de faire les nôtres.
Cependant certaines nous seraient bien utiles !
Qui n'a jamais eu besoin du numéro de semaine d'une date, ou du n°/nom du jour de la semaine, du nom du mois, d'un nombre aléatoire, etc ... ?
Ceux qui connaissent SQL savent qu'il contient de nombreuses fonctions très utiles.
Ainsi, récupérer le n° de semaine d'une date de la base de données et facile :
SELECT MADATE, WEEK_ISO(MADATE) FROM MATABLE

Une astuce simple consiste à utiliser cette possibilité dans les programmes à partir d'une table "bidon", c'est à dire ne servant qu'à ça et dont le contenu (sans aucun intérêt) se résume surtout à une seule ligne (=enregistrement).
Il n'est même pas nécessaire de créer cette table, IBM l'a fait pour nous : SYSIBM/SYSDUMY1

Ainsi dans un programme RPG (3 ou 4) nous pouvons faire :
Code:
C/EXEC SQL   SELECT WEEK_ISO(:MADATE)  INTO :WEEK  FROM SYSIBM/SYSDUMMY1
C/END-EXEC
Ce code va nous renvoyer dans la variable RPG WEEK (numérique) le numéro de la semaine ([ur=http://fr.wikipedia.org/wiki/Semaine_1l]au standard ISO[/url]) à partir de la date contenue dans la vairable RPG MADATE. En RPG 3 cette date est une chaine alphanumérique, au format de date indiqué dans la commande de compilation, au format *ISO (YYYY-MM-DD) ou celui indiqué par une instruction SQL : SET OPTION DATFMT = ...). En RPG 4 la date peut être également une chaine, mais aussi, bien sûr, une zone date.
C'est aussi simple que cela, en deux lignes, nous utilisons la fonction SQL.

Mais on peut faire mieux, en évitant de déclencher les mécanismes d'accès à la DB par le SELECT, à l'aide de linstuction d'affection SET de SQL.

Notre instruction devient donc :
Code:
C/EXEC SQL   SET :WEEK = WEEK_ISO(:MADATE) 
C/END-EXEC

Un exemple complet en RPG III :

Code:
     I            DS                                         
     I                                        1   30WEEK     
     I                                        1   3 WEEKA     
     I                                        4  13 NOM       
      * 2009-01-26 = LUNDI 26 JANVIER 2009, SEMAINE 5         
     C                     MOVEL'2009-01-'WDATE  10           
     C                     MOVE '26'      WDATE               
     C/EXEC SQL SET :WEEK = WEEK_ISO(:WDATE)                 
     C/END-EXEC                                               
     C           WEEKA     DSPLY                             
     C/EXEC SQL SET :NOM = DAYNAME(:WDATE)                   
     C/END-EXEC                                               
     C           NOM       DSPLY                             
     C/EXEC SQL SET :NOM = MONTHNAME(:WDATE)                 
     C/END-EXEC                                               
     C           NOM       DSPLY                             
     C                     SETON                     LR       


Vous trouverez la référence des fonctions scalaires SQL (V5R4) ici :
http://publib.boulder.ibm.com/infocenter/iseries/v5r4/index.jsp?topic=/db2/rbafzmstch2func.htm

Amusez vous bien !  Wink
Journalisée

Il y a 10 sortes de gens : Ceux qui comprennent le binaire et les autres ...
Pages: [1]   Haut de page
  Imprimer  
 
Aller à:  


Propulsé par MySQL Propulsé par PHP Common France © 2008, 2009  
AS/400, AS400, iSeries, i5, Power i sont des marques déposées d'International Business Machines Corp.

Powered by SMF 1.1.16 | SMF © 2006-2008, Simple Machines
SMFAds for Free Forums
SMF customization services by 2by2host.com
XHTML 1.0 Transitionnel valide ! CSS valide !
reserved
SimplePortal 2.1.1