oracle调用shell

1,创建java source
create or replace and compile java source named Execshellcmd as
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;

public class Execshellcmd {
  public static String callShell(String path) {
    String message = "";

   try {
      Process process = Runtime.getRuntime().exec(path);
      int waitFor = process.waitFor();

      InputStream is = process.getErrorStream();
      InputStreamReader isr = new InputStreamReader(is);
      BufferedReader br = new BufferedReader(isr);
      String line = null;
      while ((line = br.readLine()) != null) {
        message += line;
      }

      message += " Process waitFor=" + waitFor;
      int exitValue = process.exitValue();
      message += " Process exitValue=" + exitValue;
    } catch (Exception e) {
      message = e.getMessage();
      e.printStackTrace();
    }

    return message;
  }

}


2, 创建存储过程或者函数进行调用
create or replace function fun_callshell(p_command   STRING) return varchar2
AS LANGUAGE JAVA
NAME'Execshellcmd.callShell (java.lang.String) return java.lang.String';

create or replace procedure pro_callshell(p_command   STRING)
IS LANGUAGE JAVA
NAME'Execshellcmd.callShell (java.lang.String)';


3,赋权
begin
dbms_java.grant_permission('LOGE','SYS:java.io.FilePermission','<<ALL FILES>>','read,write,execute,delete');
end;
begin
dbms_java.grant_permission('LOGE','java.lang.RuntimePermission','*','writeFileDescriptor' );
end;

4,测试
select fun_callshell('/home/oracle/1.sh') from dual;

第二种 使用scheduler
测试sys用户执行,
begin
  DBMS_SCHEDULER.create_job (job_name => 'test', job_type => 'EXECUTABLE', job_action => '/home/oracle/1.sh');  
end;
或者带有执行间隔的:
dbms_scheduler.create_job(job_name=>'j_test',job_type=>'executable',job_action=>'/home/oracle/1.sh',start_date=>sysdate,repeat_interval=>'freq=daily;interval=1',number_of_arguments=>1);

执行:
begin
  DBMS_SCHEDULER.run_job (job_name => 'test');  
end;

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

朝闻道-夕死可矣

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值