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这个类不能少,用于异步读取命令的输出。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。