Oracle has been around so long and so many questions have been asked and answered in so many different ways that it can be difficult to find a definitive answer, especially to a best-practices type question like this one.
There are dozens of pages and blog posts explaining the basic differences between PL/SQL functions and procedures:
Functions return a value. Procedures don’t.
Functions are callable (with some restrictions) from within standard SQL statements. Procedures aren’t.
So when should you use which?