Cet étui est exactement ce pour quoi les boucles sont bonnes (et conçues).
Puisque vous faites des choses qui sortent du cadre de la base de données, il est parfaitement légitime d'utiliser des boucles pour elles.
Les bases de données sont conçues pour stocker des données et effectuer des requêtes sur ces données qui les renvoient de la manière la plus pratique.
Les bases de données relationnelles peuvent renvoyer des données sous forme d'ensembles de lignes.
Les curseurs (et les boucles qui les utilisent) sont conçus pour conserver un ensemble de lignes stable afin que certaines choses puissent être faites avec chacune de ses lignes.
Par "choses" ici, je n'entends pas de pures astuces de base de données, mais de vraies choses qui affectent le monde extérieur, les choses pour lesquelles la base de données est conçue, qu'il s'agisse d'afficher un tableau sur une page Web, de générer un rapport financier ou d'envoyer un e-mail.
Il est déconseillé d'utiliser des curseurs pour des tâches de base de données pures (comme la transformation d'un ensemble de lignes en un autre), mais il est parfaitement agréable de les utiliser pour des choses comme celle que vous avez décrite.
Les méthodes basées sur des ensembles sont conçues pour fonctionner dans une seule transaction.
Si votre requête set-base échoue pour une raison quelconque, votre base de données reviendra à l'état dans lequel elle se trouvait auparavant, mais vous ne pouvez pas "annuler" un e-mail envoyé. Vous ne pourrez pas suivre vos messages en cas d'erreur.