I Oracle-världen bör den allmänna utvecklingsordningen vara:
Om det är möjligt gör det enbart med SQL. Om du behöver mer än SQL gör det med PL/SQL. Om du behöver något som PL/SQL inte kan göra, använd Java. Om allt annat misslyckas använd C. Om du inte kan gör det med C, backa långsamt bort från problemet....
PL/SQL-lagrade procedurer är ett utmärkt sätt att flytta din affärslogik till ett lager som är tillgängligt för alla integrationstekniker. Affärslogik i ett paket (skriv inte fristående funktioner och procedurer - de kommer att växa med tiden på ett ohanterligt sätt) kan köras av Java, C#, PL/SQL, ODBC och så vidare.
PL/SQL är det snabbaste sättet att kasta runt stora databitar utanför ren SQL. Funktionerna "Bulkbindning" betyder att den fungerar mycket bra med SQL-motorn.
Java lagrade procedurer är bäst för att skapa funktionalitet som interagerar med nätverk eller operativsystem. Exempel skulle vara att skicka e-postmeddelanden, FTP-data, mata ut till textfiler och zippa upp dem, köra värdkommandorader i allmänhet.
Jag har aldrig behövt koda något C när jag arbetade med Oracle, men förmodligen skulle det kunna användas för att integrera med äldre appar.