Dans le monde Oracle, l'ordre général de développement devrait être :
Dans la mesure du possible, faites-le uniquement avec SQL. Si vous avez besoin de plus que SQL, faites-le avec PL/SQL. Si vous avez besoin de quelque chose que PL/SQL ne peut pas faire, utilisez Java. Si tout le reste échoue, utilisez C. Si vous ne pouvez pas faites-le avec C, reculez lentement loin du problème....
Les procédures stockées PL/SQL sont un excellent moyen de déplacer votre logique métier vers une couche qui sera accessible par n'importe quelle technologie d'intégration. La logique métier dans un package (n'écrivez pas de fonctions et de procédures autonomes - elles se développeront avec le temps de manière ingérable) peut être exécutée par Java, C#, PL/SQL, ODBC, etc.
PL/SQL est le moyen le plus rapide de jeter d'énormes blocs de données en dehors du SQL pur. Les fonctionnalités "Bulk Binding" signifient qu'il fonctionne très bien avec le moteur SQL.
Les procédures stockées Java sont idéales pour créer des fonctionnalités qui interagissent avec le réseau ou le système d'exploitation. Des exemples seraient l'envoi d'e-mails, le transfert de données par FTP, la sortie vers des fichiers texte et leur compression, l'exécution des lignes de commande de l'hôte en général.
Je n'ai jamais eu à coder de code C lorsque je travaillais avec Oracle, mais je suppose qu'il pourrait être utilisé pour l'intégration avec des applications héritées.