------------------------------windows下可以成功调用ipconfig等命令---------------------------------------------------------
CREATE OR REPLACE AND RESOLVE JAVA SOURCE NAMED "EvokeOsCmd" AS
import java.io.*;
import java.lang.*;
public class EvokeOsCmd extends Object{
  public static void main(String [] args){
    EvokeOsCmd oscmd = new EvokeOsCmd();
   oscmd.runOsCmd();   }
   public void runOsCmd(){      try {
        // Execute a command with an argument that contains a space
        //String[] commands = new String[]{"grep", "hello world", "/tmp/f.txt"};
        //commands = new String[]{"grep", "hello world", "c:\\Documents and Settings\\f.txt"};
          System.out.println("Starting run.sh");
        //String command = "cmd.exe /c dir";
          String command = "ipconfig";        //String command = "notepad";
        Process p = Runtime.getRuntime().exec(command);              int bufSize=4096;
              BufferedInputStream bis=
                      new BufferedInputStream(p.getInputStream(),bufSize);
                      int len;
                      byte buffer[]=new byte[bufSize];
                      while((len=bis.read(buffer,0,bufSize))!=-1)
                                   System.out.write(buffer,0,len);                      p.waitFor();
        System.out.println("Starting run.sh successfully complete");
              }catch (Exception e)
              {
           e.printStackTrace();
           }
  }
}
/
-----------------------------
CREATE OR REPLACE PROCEDURE RUN_OSCMD as language java
name 'EvokeOsCmd.main (java.lang.String[])';
/
-----------------------------
begin
  dbms_java.grant_permission(USER,'java.io.FilePermission','*','execute,write,read');
  --dbms_java.grant_permission(USER,'java.io.FilePermission','*','execute,write,read');
  dbms_java.grant_permission(USER,'java.lang.RuntimePermission','*','writeFileDescriptor');
end;
/
-----------------------------
set serveroutput on size 1000000
exec dbms_java.set_output(1000000);
-----------------------------
exec run_oscmd;
/------------------------------------UNIX下通过存储过程调用操作系统命令不能成功--------------------------------------
create or replace and compile
java source named "EvokeOsCmd"
as
import java.io.*;
import java.lang.*;
public class EvokeOsCmd extends Object{
  public static void main(String [] args){
    EvokeOsCmd oscmd = new EvokeOsCmd();
   oscmd.runOsCmd();   }
   public void runOsCmd(){      try {
        
        //String[] commands = new String[]{"ls", "-l",">/oracle/f.txt"};
        //commands = new String[]{"grep", "hello world", "c:\\Documents and Settings\\f.txt"};        System.out.println("Starting run.sh");
        String command = "ls -l >f.txt";
        Process p = Runtime.getRuntime().exec(command);              int bufSize=4096;
              BufferedInputStream bis=
                      new BufferedInputStream(p.getInputStream(),bufSize);
                      int len;
                      byte buffer[]=new byte[bufSize];
                      while((len=bis.read(buffer,0,bufSize))!=-1)
                                   System.out.write(buffer,0,len);                      p.waitFor();
        System.out.println("Starting run.sh successfully complete");
              }catch (Exception e)
              {
           e.printStackTrace();
           }
  }
}
/
------------------------------------------------------------------------------------------
CREATE OR REPLACE PROCEDURE RUN_OSCMD as language java
name 'EvokeOsCmd.main (java.lang.String[])';
/
----------------------------------------------------------------------------------------------
set serveroutput on size 1000000
exec dbms_java.set_output(1000000);
----------------------------------------------------------------------------------------------
begin
  dbms_java.grant_permission(USER,'java.io.FilePermission','*','execute,write,read');
  --dbms_java.grant_permission(USER,'java.io.FilePermission','/oracle/try.sh','execute,write,read');
  --dbms_java.grant_permission(USER,'java.io.FilePermission','f.txt','execute,write,read');
  dbms_java.grant_permission(USER,'java.lang.RuntimePermission','*','writeFileDescriptor');
end;
/
----------------------------------------------------------------------------------------------
exec run_oscmd;
/上面的两套脚本除了WINDOWS和UNIX操作系统命令不同之外,没有任何区别,为什么WINDOWS下可以执行成功,而UNIX下执行也提示存储过程执行成功,就是没什么动作发生,ls -l>f.txt 命令执行之后没有产生 f.txt文件,就象什么都没发生一样,请教各位高手,问题出在那里了。
如果我直接把那段JAVA程序摘录出来,编译并在UNIX命令行执行JAVA程序,就可以成功调用ls -l>f.txt 命令并把输出写到f.txt文件中,但是如果封装到oracle存储过程中,从数据库中执行存储过程就不行了,但是这种方式在WINDOWS下却是可以成功的,我现在怀疑是oracle数据库用户和UNIX操作系统用户之的用户认证之类的原因造成的,就是不清楚为什么?请高手指点以上脚本都是在SQLPLUS中运行的,而且数据库跟操作系统在同一台UNIX机器上。请大家帮忙分析分析或给个可以成功在UNIX中运行的例子(oracle存储过程调用UNIX操作系统命令)