Функция всегда возвращает значение и может не выполнять операторы DML (INSERT / UPDATE / DELETE).
Хранимая процедура не может вернуть значение - вам нужно использовать параметр OUT - и может запускать операторы DML.
Преимущество использования функции по сравнению с хранимой процедурой?
Помимо приведенного выше сравнения, они равны. Но, учитывая сравнение, в зависимости от того, что вам нужно сделать, скорее всего, вы будете использовать хранимую процедуру чаще, чем функцию.