Написание функций целесообразно при обработке больших объемов данных, когда передача их по сети будет идти дольше чем сама обработка.
Написание хранимок вещь великая, но:
1. их нельзя подвести под версионный контроль
2. Если вся логика будет на БД, то рано или поздно нужно будет апгрейдить сервер с БД. В свою очередь если мы используем БД как хранилище (без обработки), то у нас будет больше времени подготовится к очередной смене архитектуры системы, когда БД в очередной раз будет узким местом.
3. Лучше в системе определять различные подсистемы ответственные за определенные бизнес-задачи, так вот обработка бизнес-логики не есть прямая задача базы данных.