SQL EMBEDDED - Proscrire les SELECT * dans les programmes RPG
Bonne pratique :
Ne pas utiliser de SELECT * dans les SQL EMBEDDED mais nommer explicitement chaque champs requêté.
Pourquoi :
Le SELECT * impose une modification du programme si la structure du fichier requêté venait à changer.
En effet: tout ajout de champ à la table devra être pris en compte dans la clause INTO résultante, le SELECT * prendra en compte automatiquement le champ ajouté mais pas la clause INTO qui devra être modifiée dans le code source avant recompilation du programme
Nommer explicitement chaque champ requêté permet :
- De limiter les données interrogées à celles réellement nécessaires.
Il est inutile de récupérer l’intégralité des champs de la table si seuls quelques uns sont utilisés par la suite du traitement.
Cela fait partie de l’optimisation de la requête. - De ne pas avoir à modifier ou à recompiler le programme lorsque de nouveaux champs sont ajoutés à la table requêtée
Ceci apporte une grande souplesse à la base de données, car cela limite les impacts de chaque évolution de table. - De faciliter la maintenance du programme car les champs utilisés sont explicitement nommés. Surtout si l’on privilégie l’utilisation des noms longs de ces champs puisqu’ils sont, par définition, plus parlant que les noms courts.
Remarque :
Certains programmeurs justifient l’utilisation du SELECT * en indiquant que c’est plus rapide à écrire :
<< Ecrire chaque champ du SELECT prend beaucoup de temps >>
Cet argument n’est pas recevable dans la mesure où :
- ACS permet en quelques clics de récupérer les champs d’une table et donc de les copier directement dans le code source du programme.
Inutile donc de ressaisir manuellement l’intégralité des champs de la table à requêter. - Dans ce cas, c’est le temps d’exécution, le temps de maintenance, la souplesse apportée qu’il faut privilégier au détriment du temps d’écriture du code source.