oracle如何使用java source调用外部程序
需求
Oracle调用第三方外部程序。Oracle使用sqluldr2快速导出大批量数据,然后用winrar压缩后发送邮件。
源码
javasource
createorreplaceandcompilejavasourcenamedjv_run_extproas
importjava.io.*;
importjava.lang.*;
importjava.util.*;
importjava.sql.*;
importoracle.sql.*;
publicclassjv_run_extpro
{
publicstaticvoidrun(Stringcmd)throwsIOException
{
Processp=Runtime.getRuntime().exec(cmd);
StreamGobblererrorGobbler=newStreamGobbler(p.getErrorStream(),"Error");
StreamGobbleroutputGobbler=newStreamGobbler(p.getInputStream(),"Output");
errorGobbler.start();
outputGobbler.start();
try
{
p.waitFor();
}
catch(InterruptedExceptionie)
{
System.out.println(ie);
}
}
publicstaticclass
StreamGobblerextendsThread{
InputStreamis;
Stringtype;
publicStreamGobbler(InputStreamis,Stringtype){
this.is=is;
this.type=type;
}
publicvoidrun(){
try{
InputStreamReaderisr=newInputStreamReader(is);
BufferedReaderbr=newBufferedReader(isr);
Stringline=null;
while((line=br.readLine())!=null){
if(type.equals("Error")){
System.out.println("Error:"+line);
}else{
System.out.println("Debug:"+line);
}
}
}catch(IOExceptionioe){
ioe.printStackTrace();
}
}
}
}
存储过程
createorreplaceprocedurepro_jv_run_extpro(p_cmdvarchar2)as
languagejavaname'jv_run_extpro.run(java.lang.String)';
调用
begin
pro_jv_run_extpro('sqluldr264.exescott/hh@pdborclquery="select*fromemp"field=,head=yesfile=D:\Desktop\tmp\sqluldr2\OUT2.TXT');
pro_jv_run_extpro('"D:\ProgramFiles\WinRAR\Rar.exe"a-ep-df"D:\Desktop\tmp\sqluldr2\20160916.rar""D:\Desktop\tmp\sqluldr2\OUT2.TXT"');
end;
总结
Javasource里StreamGobbler这个类不能少,用于异步读取命令的输出。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。