In the Oracle world the general order of development should be:
Wherever possible do it purely with SQL.
If you need more than SQL do it with PL/SQL.
If you need something that PL/SQL can't do, then use Java.
If all else fails use C.
If you can't do it with C, back slowly away from the problem....
PL/SQL stored procedures are an excellent way of moving your business logic to a layer that will be accessible by any integration technology. Business Logic in a Package (don't write stand alone Functions and Procedures - they'll grow over time in an unmanageable way) can be executed by Java, C#, PL/SQL, ODBC and so on.
PL/SQL is the fastest way to throw around huge chunks of data outside of pure SQL. The "Bulk Binding" features means it works very well with the SQL engine.
Java stored procedures are best for creating functionality that interacts with network or operating system. Examples would be, sending emails, FTP'ing data, outputting to text files and zipping it up, executing host command lines in general.
I've never had to code up any C when working with Oracle, but presumably it could be used for integrating with legacy apps.