Oracleの代替メソッドからシェルを呼び出す

Oracleからのシェルの呼び出しの記事読んだ後



この問題の解決策を共有することにしました。 Javaは問題の解決に使用されるため、このソリューションはOracle XEでは機能しません。



しかし、このソリューションはクロスプラットフォームです-私が遭遇したすべてのOSで動作します。

また、DBMS_OUTPUTで外部コマンドの結果を確認できます。



実装に進みましょう。



ステップ1:それに基づいてJavaソースを作成します。



import java.lang。*;

import java.io. *;

import java.sql.SQLException;



パブリッククラスHost {



public static void executeCommand(文字列コマンド)はSQLException、IOExceptionをスローします

{

#sql {

始める

DBMS_JAVA.set_output(10000000);

終わり;

};

文字列uFullCommand = ""; 文字列nameOS = System.getProperty( "os.name");



if((nameOS.toLowerCase())。indexOf( "lin")!= -1)

{

uFullCommand = "/ bin / sh" + "-c" + command;

}

else if((nameOS.toLowerCase())。indexOf( "win")!= -1)

{

uFullCommand = "%systemroot%\\ system32 \\ cmd.exe" + "/ y" + "/ c" +コマンド。

}

else if((nameOS.toLowerCase())。indexOf( "nix")!= -1)

{

uFullCommand =コマンド;

}

他に

{

uFullCommand =コマンド;

}



ランタイムrt = Runtime.getRuntime();

プロセスp = rt.exec(uFullCommand);

BufferedReader in = new BufferedReader(新しいInputStreamReader(p.getInputStream()));



文字列line = null;

while((line = in.readLine())!= null)

{

System.out.println(行);

}

}

};



ステップ2:PL / SQLでラップします。



作成または置換

PROCEDURE host_command_proc(p_command IN VARCHAR2)AS

言語JAVA

NAME 'Host.executeCommand(java.lang.String)';

/



呼び出し例:



始める

host_command_proc( "ls / tmp");

終わり;



そして、はい、このソリューションのアイデアはTom Kiteから借りたものです。



All Articles