前言
通过Oracle连接,在Oracle session中执行操作系统命令操作数据库服务器并获取返回。
需要oracle用户具有调用java权限;
对于操作系统中oracle软件所属用户最好有管理员权限,不然很多系统层面命令没有权限执行。
一、创建java_source实现执行操作系统命令得到返回结果
create or replace and compile java source named "util" as
import java.io.BufferedInputStream;
public class util extends Object {
public static String RunThis(String args) {
Runtime rt = Runtime.getRuntime();
String RC = "";
try {
Process p = rt.exec(args);
int bufSize = 4096;
BufferedInputStream bis = new BufferedInputStream(p.getInputStream(), bufSize);
byte[] contents = new byte[1024];
int bytesRead = 0;
while((bytesRead = bis.read(contents)) != -1) {
RC += new String(contents, 0, bytesRead);
}
} catch (Exception e) {
//e.printStackTrace();
RC = e.getMessage();
} finally {
return RC;
}
}
}
授权用户
exec dbms_java.grant_permission( &username, 'SYS:java.io.FilePermission','<<ALL FILES>>', 'execute');
二、创建plsql函数调用刚创建的java_source
create or replace function run_cmd(p_cmd in varchar2) return varchar2
as
language java
name 'util.RunThis(java.lang.String) return String';