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.