oracle如何使用java source调用外部程序
作者:mellowsmile 发布时间:2023-07-12 02:52:42
标签:oracle,java,source,外部程序
需求
Oracle调用第三方外部程序。Oracle使用sqluldr2快速导出大批量数据,然后用winrar压缩后发送邮件。
源码
java source
create or replace and compile java source named jv_run_extpro as
import java.io.*;
import java.lang.*;
import java.util.*;
import java.sql.*;
import oracle.sql.*;
publicclass jv_run_extpro
{
publicstaticvoid run(String cmd) throws IOException
{
Process p=Runtime.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);
}
}
publicstaticclass
StreamGobbler extends Thread {
InputStream is;
String type;
public StreamGobbler(InputStream is, String type) {
this.is = is;
this.type = type;
}
publicvoid run() {
try {
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
String line = null;
while ((line = br.readLine()) != null) {
if (type.equals("Error")) {
System.out.println("Error :" + line);
} else {
System.out.println("Debug:" + line);
}
}
} catch (IOException ioe) {
ioe.printStackTrace();
}
}
}
}
存储过程
create or replace procedure pro_jv_run_extpro(p_cmd varchar2) as
language java name 'jv_run_extpro.run(java.lang.String)';
调用
begin
pro_jv_run_extpro('sqluldr264.exe scott/hh@pdborcl query="select * from emp" field=, head=yes file=D:\Desktop\tmp\sqluldr2\OUT2.TXT');
pro_jv_run_extpro('"D:\Program Files\WinRAR\Rar.exe" a -ep -df "D:\Desktop\tmp\sqluldr2\20160916.rar" "D:\Desktop\tmp\sqluldr2\OUT2.TXT"');
end;
总结
Java source里StreamGobbler这个类不能少,用于异步读取命令的输出。


猜你喜欢
- 一、概述切片(Slice)是一个拥有相同类型元素的可变长度的序列。它是基于数组类型做的一层封装。它非常灵活,支持自动扩容。切片是一个引用类型
- 前言第一次看go基础语法的时候,用使用到了defer。但是一直不知道它到底是什么,有什么用途。这几天通过查询、学习。算是对defer有了一点
- 通过这个布局思路来做一个简单的后台管理系统也是OK的,大家可以参考一下啦!话不多说,还是先来梳理一下需要的第三方模块。PyQ5 的UI界面布
- AES(英文:Advanced Encryption Standard,中文:高级加密标准),是一种区块加密标准。AES将原始数
- 前言首先简单说一下虚拟环境的概念。虚拟环境是由基础环境创建而出,用于独有项目的开发,每个项目都应该有一个独有的环境。第一步检查是否安装Pyt
- 在python程序中添加tensoboard一系列代码我就不一一写了。查找资料就可以找到很多这方面的内容。今天我主要是想说下,如何在cmd中
- 本文实例讲述了Python3.5迭代器与生成器用法。分享给大家供大家参考,具体如下:1、列表生成式通过列表生成式可以直接创建一个列表。代码:
- 查看系统原有Python注:可以将python指向python3,但必须修改一些命令如yum的配置,不然会报错。安装依赖yum instal
- 发现问题图片地址如下http://qximg.lightplan.cc/2016/09/11/1473574486942944.jpeg需要
- 本文实例讲述了php输出指定时间以前时间格式的方法。分享给大家供大家参考。具体分析如下:比如说你需要在php中输出3天前,20分钟以前,可以
- function getExplorerInfo() { var explorer = window.navigator.user
- 树的实质是很多条数据按照一定的内在关系,分层级显示出来。因此每一条数据包括数据项和相互关系。数据项就对应了树中的column,而相互关系对应
- 涉及到开发桌面程序,尤其是文本处理,剪贴板就很常用,不像 java 中那么烦锁,wxpython 中访问剪贴板非常简单,寥寥几句足以。# 取
- 这篇文章主要介绍了python已协程方式处理任务实现过程,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的
- django上线后,需要把setting.py文件的debug=True改为False,以防暴露代码报错问题。因为我项目用到css的地方只有
- 需要先装pywin32,windows下调用winapi的接口## _*_ coding:UTF-8 _*___author__ =
- 本文代码将一些简单常用的SQL语句,拆分、封装成链式函数与终结函数,链式操作没有先后之分,实现傻瓜式mysql数据库操作。 同时学习下静态成
- 本篇文章通过使用python实现对计算机摄像头的调用从而实现摄像监控的功能。利用opencv的图像处理功能可以轻松对计算机摄像头的调用实现实
- 为什么需要协程协程的本质是将一段数据的运行状态进行打包,可以在线程之间调度,所以协程就是在单线程的环境下实现的应用程序级别的并发,就是把本来
- 目录range函数zip() 函数其它内置函数数据类型转换相关内置函数变量相关函数数学相关函数进制相关函数高阶函数sorted(iterab