Ten przypadek jest dokładnie tym, do czego pętle są dobre (i przeznaczone).
Ponieważ robisz rzeczy, które wykraczają poza zakres bazy danych, używanie do nich pętli jest całkowicie uzasadnione.
Bazy danych są przeznaczone do przechowywania danych i wykonywania zapytań dotyczących tych danych, które zwracają je w najbardziej przydatny sposób.
Relacyjne bazy danych mogą zwracać dane w postaci zestawów wierszy.
Kursory (i pętle, które ich używają) są zaprojektowane do utrzymywania stabilnego zestawu wierszy, dzięki czemu można wykonać pewne rzeczy z każdym z jego wierszy.
Przez „rzeczy” mam tu na myśli nie czyste sztuczki z bazami danych, ale prawdziwe rzeczy, które wpływają na świat zewnętrzny, rzeczy, do których została zaprojektowana baza danych, czy to wyświetlanie tabeli na stronie internetowej, generowanie raportu finansowego czy wysyłanie wiadomości e-mail.
Używanie kursorów do zadań związanych z samą bazą danych (takich jak przekształcanie jednego zestawu wierszy w inny) jest złe, ale całkiem miło jest używać ich do rzeczy takich jak ta, którą opisałeś.
Metody oparte na zestawach są zaprojektowane do pracy w ramach pojedynczej transakcji.
Jeśli twoje zapytanie set-base z jakiegoś powodu się nie powiedzie, twoja baza danych powróci do stanu sprzed, ale nie możesz "wycofać" wysłanej wiadomości e-mail. Nie będziesz w stanie śledzić swoich wiadomości w przypadku błędu.