oracle 调用 程序,oracle能否实现调用外部程序

One example from Tom:

rem 1.授权

begin

dbms_java.grant_permission('SYS','java.io.FilePermission','/bin/ps','execute');

dbms_java.grant_permission('SYS','java.lang.RuntimePermission','*','writeFileDescriptor' );

end;

rem 2.创建Java对象

create or replace and compile

java source named "Util"

as

import java.io.*;

import java.lang.*;

public class Util extends Object

{

public static int RunThis(String args)

{

Runtime rt = Runtime.getRuntime();

int        rc = -1;

try

{

Process p = rt.exec(args);

int bufSize = 4096;

BufferedInputStream bis =

new BufferedInputStream(p.getInputStream(), bufSize);

int len;

byte buffer[] = new byte[bufSize];

// Echo back what the program spit out

while ((len = bis.read(buffer, 0, bufSize)) != -1)

System.out.write(buffer, 0, len);

rc = p.waitFor();

}

catch (Exception e)

{

e.printStackTrace();

rc = -1;

}

finally

{

return rc;

}

}

}

/

rem 3.创建函数

create or replace function RUN_CMD

( p_cmd  in varchar2) return number

as

language java

name 'Util.RunThis(java.lang.String) return integer';

/

rem 4.创建过程

create or replace procedure RC(p_cmd in varchar2)

as

x number;

begin

x := run_cmd(p_cmd);

end;

/

rem 5.调用

set serveroutput on size 1000000

exec dbms_java.set_output(1000000)

exec rc('/bin/ps ');

rem 6.运行结果

SQL> set serveroutput on size 1000000

SQL> exec dbms_java.set_output(1000000)

exec rc('/bin/ps ');

PL/SQL procedure successfully completed.

SQL> PID TTY     TIME CMD

6287 ?        00:00:00 ocssd.bin

6289 ?        00:00:00 ocssd.bin

6290 ?        00:00:00 ocssd.bin

6291 ?        00:00:00 ocssd.bin

6292 ?        00:00:00 ocssd.bin

6293 ?        00:00:00 ocssd.bin

6294 ?        00:00:00 ocssd.bin

6295 ?        00:00:00 ocssd.bin

6296 ?        00:00:00 ocssd.bin

6298 ?        00:00:00 ocssd.bin

6299 ?        00:00:00 ocssd.bin

6300 ?        00:00:00 ocssd.bin

6301 ?        00:00:00 ocssd.bin

6302 ?        00:00:00 ocssd.bin

6303 ?        00:00:00 ocssd.bin

6372 ?        00:00:12 tnslsnr

9763 ?        00:00:01 perl

10109 ?        00:02:38 emagent

29134 ?        00:00:00 oracle

29136 ?        00:00:00 oracle

29138 ?        00:00:02 oracle

29140 ?        00:00:07 oracle

29142 ?        00:00:14 oracle

29144 ?        00:00:10 oracle

29146 ?        00:00:00 oracle

29148 ?        00:00:01 oracle

29150 ?        00:00:00 oracle

29153 ?        00:00:00 oracle

29396 ?        00:04:16 oracle

29398 ?        00:02:50 oracle

29413 ?        00:00:00 oracle

29419 ?        00:00:15 oracle

29421 ?        00:00:00 oracle

29423 ?        00:01:13 oracle

29426 ?        00:00:01 oracle

5234 ?        00:01:45 java

8178 ?        00:00:00 oracle

8241 ?        00:00:00 oracle

8243 ?        00:00:05 oracle

8245 ?        00:00:18 oracle

8247 ?        00:00:00 oracle

8249 ?        00:00:02 oracle

8262 ?        00:00:00 oracle

8264 ?        00:00:16 oracle

8315 ?        00:00:06 oracle

8579 ?        00:00:00 oracle

8646 ?        00:00:09 oracle

9153 ?        00:00:00 ps

PL/SQL procedure successfully completed.

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值