《oracle使用java source调用外部程序》由会员分享,可在线阅读,更多相关《oracle使用java source调用外部程序(3页珍藏版)》请在金锄头文库上搜索。
1、ORACLE技术交流群(144243235)Oracle使用java source调用外部程序 需求 Oracle调用第三方外部程序。Oracle使用sqluldr2快速导出大批量数据,然后用winrar压缩后发送邮件。 本文档主要实现前两步需求,发送邮件程序这里不再说明。原码 授权begin dbms_java.grant_permission(SCOTT,SYS:java.io.FilePermission,read,write,execute,delete); end;begin dbms_java.grant_permission(SCOTT,java.lang.RuntimePerm
2、ission,*,writeFileDescriptor ); end;java source create or replace and compile java source named jv_run_extpro asimport java.io.*;import java.lang.*;import java.util.*;import java.sql.*;import oracle.sql.*;public class jv_run_extpro public static void run(String cmd) throws IOException Process p=Runt
3、ime.getRuntime().exec(cmd); StreamGobbler errorGobbler = new StreamGobbler(p.getErrorStream(), Error); StreamGobbler outputGobbler = new StreamGobbler(p.getInputStream(), Output); errorGobbler.start(); outputGobbler.start(); try p.waitFor(); catch(InterruptedException ie) System.out.println(ie); pub
4、lic static class StreamGobbler extends Thread InputStream is; String type; public StreamGobbler(InputStream is, String type) this.is = is; this.type = type; public void run() try InputStreamReader isr = new InputStreamReader(is); BufferedReader br = new BufferedReader(isr); String line = null; while
5、 (line = br.readLine() != null) if (type.equals(Error) System.out.println(Error : + line); else System.out.println(Debug: + line); catch (IOException ioe) ioe.printStackTrace(); 说明:StreamGobbler这个类不能少,用于异步读取命令的输出。存储过程 create or replace procedure pro_jv_run_extpro(p_cmd varchar2) as language java nam
6、e jv_run_extpro.run(java.lang.String); 调用 begin pro_jv_run_extpro(sqluldr264.exe scott/hhpdborcl query=select * from emp field=, head=yes file=D:Desktoptmpsqluldr2OUT2.TXT); pro_jv_run_extpro(D:Program FilesWinRARRar.exe a -ep -df D:Desktoptmpsqluldr220160916.rar D:Desktoptmpsqluldr2OUT2.TXT); end; 参数说明: a: 压缩文件-ep:包内不显示压缩路径-df:压缩后删除原文件总结 程序执行需要授权,如需要查看执行日志,可在sqlplus下先执行:Set serveroutput onExec dbms_java.set_output(5000);HH()总结整理