概要
オラクルサーバー内にあるBATファイルを,クライアントからストアドを使って実行する方法。サーバーにある各種バッチファイルをクライアントから実行させたい場合など。BATファイルにあれこれ仕込んでおけば,クライアントからオラクルのエクスポートを実行するという使い方も可能。
全体の構想
全体の構想は下図のとおりである。クライアントはサーバーにあるストアドプロシージャをキックするだけで,サーバー内にあるBATファイルを実行できる
流れは以下の通り
- クライアントからサーバー内のストアドをキックする
- ストアドがJAVAを呼び出す
- JAVAでBATファイルを実行する
Oracle サーバー側の準備
JAVAオブジェクトを作成する
サンプルソースコードは以下のとおりです。SQL Developer などを利用して作成してください。
import
java.io.*;
public class javaオブジェクトの名前 {
public static void user(int[] ret) {
try {
Process process = Runtime.getRuntime().exec("C:\\aaa\\bbb\\ccc.bat");
InputStream is = process.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(is));
String line;
while ((line = br.readLine()) != null) {
System.out.println(line);
}
ret[0]=0;
} catch (Exception e) {
e.printStackTrace();
ret[0]=1;
}
}
}
ストアドプロシージャ
create or replace PROCEDURE "BATRUN_TEST" (ret out number)
as Language Java
NAME 'javaオブジェクトの名前.user(int[])'
;
クライアントからの実行
サーバー上に保存した,BATRUN_TEST ストアドを実行するコードを記述する。言語が様々なのでここでは割愛します。JAVAからBATファイルの実行ができなければ,ret = 1 が返り値となる。問題なければ ret=0。
補足
ユーザー権限
Oracleサーバー内部でJAVAを利用するときは
ユーザーに ロール権限 JAVA_**** を付与する必要がある
そうしないと動いてくれません。
プロパティ
Oracle 12c
Oracle 11
Oracle 10g
コメント