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から借りたものです。

Source: https://habr.com/ru/post/J150081/


All Articles