通过Oracle在服务器执行操作系统命令并获取返回

前言

通过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';

三、执行

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值