文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>oracle调用操作系统命令

oracle调用操作系统命令

时间:2010-06-11  来源:hxl

众所周知在Oracle的SQLPLUS下可以使用Host命令来执行操作系统级别的命令或者可执行文件,但这种方法有几个缺陷:
1. 无法在Procedure或者Function中使用.
2. 无法等待程序执行完毕并取得执行结果. Host命令只能在操作系统上另开一个进程执行你所指定的操作系统指令.
当我们有特殊的需求,如复制一个文件到另外一个目录下,并在复制完成之后做一些后续的操作,就力不从心了.

现在,10G及其以后版本的Oracle数据库提供了对Java程序的更多的支持,很好的解决了这方面的问题. 解决方法如下,
1. 首先我们创建调用操作系统命令的Java方法
create or replace and compile java source named oscmd as
import java.io.*;
import java.lang.*;
public class OSCmd extends Object {
    public static int OSCmd(String args) {
        Runtime rt = Runtime.getRuntime();
        int rc = -1;
        try {
            Process p = rt.exec(args);
            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);
            rc = p.waitFor();
        } catch (Exception e) {
            e.printStackTrace();
            rc = -1;
        } finally {
            return rc;
        }
    }
}
2. 然后,再创建一个PL/SQL函数调用Java方法
CREATE OR REPLACE FUNCTION Run_Cmd(p_Cmd IN VARCHAR2) RETURN NUMBER AS LANGUAGE JAVA NAME 'OSCmd.OSCmd(java.lang.String) return integer';
3. 之后我们就可以轻松的在Oracle程序中调用操作系统命令了
declare
    n number;
begin
    n := Run_Cmd('Copy C:\temp.txt D:\temp.txt');
end;
相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载