Here is the simple mantra from my favourite Oracle Man Tom Kyte.
1).You should do it in a single SQL statement if at all possible.
2).If you cannot do it in a single SQL statement, do it in PL/SQL.
3).If you cannot do it in PL/SQL, try a Java stored procedure.
4).If you cannot do it in Java, do it in a C external procedure.
5).If you cannot do it in a C external procedure, you might want to seriously think about why it is you need to do it.