Ceux qui pensent que le SQL imbriqué est source de confusion et se demandent pourquoi s'en préoccuper, seront peut-être surpris en voyant la simplicité avec laquelle on peut imbriquer des fonctions scalaires dans les applications. Pour illustrer cela, examinons à nouveau la fonction scalaire DayOfWeek. La figure 1A présente un
Le mécanisme des fonctions scalaires imbriquées
programme de service dans lequel la procédure RtvDayOfWeek extrait le jour de la semaine pour une date donnée. Cette procédure accepte un champ date et renvoie une valeur indiquant le jour de la semaine auquel la date tombe. Le programme définit d’abord une date Sunday arbitraire ( Some Sunday ) sur laquelle RtvDayofWeek fonde ses calculs. Ensuite, la procédure détermine le nombre de jours entre SomeDay et la date fournie en entrée (DateIn). Enfin, la procédure utilise un modulo arithmétique pour convertir ce nombre de jours en une valeur comprise entre 0 et 6 et ajoute 1 avant de renvoyer la valeur à l’appelant. On pourra s’étonner que la procédure utilise des opérations %Rem imbriquées (nested) ; mais la procédure fait cela pour traiter toutes les dates d’entrée sans qu’il soit nécessaire de s’ajuster aux dates antérieures à la date scindée arbitraire SomeSunday.
Voyons maintenant un programme de service équivalent (figure 1B) qui utilise la fonction scalaire SQL DayOfWeek. Dans cet exemple, la procédure RtvDayOfWeek accepte à nouveau un champ date comme entrée et renvoie une valeur de 1 à 7 qui indique le jour de la semaine auquel la date tombe. Toutefois, dans ce cas, aucun calcul n’est nécessaire. La procédure définit simplement une variable hôte (DayOfWeekNbr) dans laquelle la fonction scalaire DayOfWeek place la valeur, puis exécute la fonction SQL pour extraire le jour de la semaine. Pour exécuter les instructions SQL dans vos programmes RPG, utilisez la forme générale :
C/exec SQL
C+ YourSQLStatement
C/end-exec
où YourSQLStatement est l'instruction SQL que vous voulez exécuter. Notez que dans la figure 1B, la procédure utilise l'instruction Set pour attribuer une valeur à une variable hôte. Notez également que la syntaxe SQL requiert qu'un signe deux-points précède le nom de la variable hôte. Vous vous interrogez peut-être sur l'avantage de la méthode SQL. Après tout, ces deux programmes de service sont pratiquement de même longueur et complexité. Je pourrais répondre que la méthode de la fonction scalaire est plus claire et moins sujette à erreur, mais ces exemples démontrent seulement le mécanisme d'utilisation des fonctions scalaires en RPG. Dans un code plus complexe, nous verrons que les avantages peuvent être plus substantiels.
Téléchargez cette ressource
Microsoft 365 Tenant Resilience
Face aux failles de résilience des tenants M365 (configurations, privilèges, sauvegarde). Découvrez 5 piliers pour durcir, segmenter et surveiller vos environnements afin de limiter l’impact des attaques. Prioriser vos chantiers cyber et améliorer la résilience de vos tenants Microsoft 365.
Les articles les plus consultés
Les plus consultés sur iTPro.fr
- Le Zero Trust : pourquoi votre entreprise en a besoin
- Cloud souverain : répondre aux enjeux d’hybridation et de maîtrise des dépendances
- Cybermenaces 2026 : l’IA devient la nouvelle arme des attaquants
- DevX Summit EMEA : les développeurs au cœur de la révolution de l’IA
Articles les + lus
Communes, entreprises ? Non, face au RGAA 5, l’IA seule ne rendra pas vos sites accessibles
DevX Summit EMEA : les développeurs au cœur de la révolution de l’IA
Adapter la sécurité OT aux réalités de l’industrie
Coder vite, mais coder juste : trouver l’équilibre à l’ère de l’IA
Mixité dans la Tech : en 2026, un choix de souveraineté stratégique
À la une de la chaîne Tech
- Communes, entreprises ? Non, face au RGAA 5, l’IA seule ne rendra pas vos sites accessibles
- DevX Summit EMEA : les développeurs au cœur de la révolution de l’IA
- Adapter la sécurité OT aux réalités de l’industrie
- Coder vite, mais coder juste : trouver l’équilibre à l’ère de l’IA
- Mixité dans la Tech : en 2026, un choix de souveraineté stratégique
