Този случай е точно това, за което циклите са добри (и предназначени).
Тъй като правите неща, които попадат извън обхвата на базата данни, е напълно легитимно да използвате цикли за тях.
Базите данни са проектирани да съхраняват данни и да изпълняват заявки срещу тези данни, които ги връщат по най-удобния начин.
Релационните бази данни могат да връщат данни под формата на набори от редове.
Курсорите (и циклите, които ги използват) са предназначени да поддържат стабилен набор от редове, така че да могат да се правят някои неща с всеки от неговите редове.
Под „неща“ тук имам предвид не чисти трикове за бази данни, а реални неща, които влияят на външния свят, нещата, за които е предназначена базата данни, било то показване на таблица на уеб страница, генериране на финансов отчет или изпращане на имейл.
Лошо е да се използват курсори за чисто бази данни (като трансформиране на един набор от редове в друг), но е напълно хубаво да се използват за неща като това, което описахте.
Базираните на набори методи са проектирани да работят в рамките на една транзакция.
Ако вашата заявка за set-base не успее по някаква причина, вашата база данни ще се върне към предишното състояние, но не можете да „връщате назад“ изпратен имейл. Няма да можете да следите съобщенията си в случай на грешка.