Oracle
 sql >> Base de données >  >> RDS >> Oracle

exécuter le script oracle sql à partir de java

J'ai eu le même problème il n'y a pas si longtemps, j'ai rencontré votre question plusieurs fois en cherchant une solution sur Google, alors je pense que je vous dois quelque chose ; voici mes conclusions jusqu'à présent :

En bref, il n'y a pas de solution toute faite pour cela :si vous ouvrez Ant ou Maven sources, vous verrez qu'ils utilisent un simple séparateur de script basé sur des expressions régulières, ce qui convient aux scripts simples, mais échoue généralement, par exemple. procédures stockées. Même son de cloche avec iBATIS, migrations c5 db, etc.

Le problème est qu'il y a plus d'un langage impliqué :pour exécuter des "scripts SQL", il faut être capable de gérer (1) les commandes SQL, (2) PL/SQL et (3) sqlplus.

Exécution de sqlplus elle-même est le chemin en effet, mais cela crée un désordre de configuration, nous avons donc essayé d'éviter cette option.

Il existe des analyseurs ANTLR pour PL/SQL, comme celui d'Alexandre Porcelli —ceux-ci sont très proches, mais personne n'a préparé de solution complète basée sur ceux-ci jusqu'à présent.

Nous avons fini par écrire encore un autre séparateur ad hoc qui est conscient de certaines commandes sqlplus comme / et EXIT - c'est toujours moche, mais fonctionne pour la plupart de nos scripts. (Notez bien que certains scripts, par exemple, avec -- à la fin commentaires, ne fonctionnera pas - c'est toujours un jeu de mots, pas une solution.)