このうち Oracle が推奨するのは loadjava ユーティリティであり、実際に簡単に利用できるのはこちらの方です。
しかし、この loadjava ユーティリティ、コマンドラインから単一コマンドとして実行する分には問題なく動作するのですが、バッチファイルの中で使用するとなぜか loadjava ユーティリティを呼び出しているステップでバッチファイルの処理が終了してしまいます...
Java のクラスは正常にロードされているし、エラーメッセージらしきものは出ないため、エラーによって処理が終了してしまうということではないらしいのですが、とにかくそこで止まってしまいます。
ということで、これまではバッチファイルで loadjava ユーティリティを使うのを避けていたのですが、先日その謎がようやく解けました。
なんと、loadjava ユーティリティ自身がバッチファイルだったのです...^^;
だからバッチファイルの中から呼び出す時は、
loadjava -user scott/tiger@orcl hoge.classではなく、
call loadjava -user scott/tiger@orcl hoge.classとしなければ、そこで終了してしまうのもあたりまえの話なのです。
ユーティリティというと IMP.EXE、EXP.EXE、SQLLDR.EXE などのように EXE ファイルであるという思い込みがあるもので、それまで全く気づきませんでした。
安易な思い込みはいけませんね^^ゞ
【関連エントリ】
[Oracle] Java ストアドプロシージャの利用法 2004/07/30
[Oracle] Java ストアドプロシージャで日本語ファイル名が扱えない 2004/12/27
[Oracle] loadjava ユーティリティが落ちる? 2006/06/29
[Oracle] Java ストアドプロシージャで Java クラス・ライブラリを使用する 2006/07/05
[Oracle] Java ストアドプロシージャで DLL を使用する際の注意点 2006/07/11