[Oracle] ストアドでサーバー内にあるBATファイルを実行

Oracle

概要

オラクルサーバー内にあるBATファイルを,クライアントからストアドを使って実行する方法。サーバーにある各種バッチファイルをクライアントから実行させたい場合など。BATファイルにあれこれ仕込んでおけば,クライアントからオラクルのエクスポートを実行するという使い方も可能。

全体の構想

全体の構想は下図のとおりである。クライアントはサーバーにあるストアドプロシージャをキックするだけで,サーバー内にあるBATファイルを実行できる

流れは以下の通り

  1. クライアントからサーバー内のストアドをキックする
  2. ストアドがJAVAを呼び出す
  3. 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;
    }
  }
}
ポイント

BATファイル名までのフルパスを指定する時,c:\aaa\bbb\ccc.bat ではだめで \\ とエンコードする必要がある。

ストアドプロシージャ

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

コメント

スポンサーリンク
タイトルとURLをコピーしました