视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
使用PL/SQL执行OS命令
2020-11-09 10:43:39 责编:小采
文档


pl/sql做为sql语言的一种补充语言,其优势自然是在处理数据方面,但是随着PL/SQL的不断成长,尤其是和JAVA语言的联系越来越紧密,这使

pl/sql做为sql语言的一种补充语言,其优势自然是在处理数据方面,但是随着PL/SQL的不断成长,尤其是和JAVA语言的联系越来越紧密,这使得PL/SQL也能完成一些高级应用操作了。

之前也有介绍使用PL/SQL执行java存储来获得MAC地址的

这里方法也类似,只是需要传入命令参数.

同样首先创建java source

create or replace and compile java source named ExeSysCommand as
import java.io.*;
public class ExeSysCommand
{
public static String ExeCmd(String args) {
Runtime run = Runtime.getRuntime();
Process process = null;
try {
process = run.exec(args); // 执行cmd命令
return "OK!";
} catch (Exception e) {
return e.getMessage();
}
}
public static void main(String[] args)
{
System.out.println("No command line arguments");
}
}

其后创建函数调用该java soure

CREATE OR REPLACE FUNCTION ExeCmd(cmd STRING) RETURN VARCHAR2 IS --执行OS命令测试
LANGUAGE JAVA NAME ' ExeSysCommand.ExeCmd(java.lang.String) return java.lang.String';

注意:有参数cmd,对应java的输入类型应当为java.lang.String.

还应当注意的是这些应当在SYS用户下操作,如果在其他用户下,会获得错误:

the Permission (java.io.FilePermission <> execute) has not been granted to SCOTT. The PL/SQL to grant this is dbms_java.grant_permission( 'SCOTT', 'SYS:java.io.FilePermission', '<>', 'execute' )

如果确实需要其他用户来执行,可以使用dbms_java.grant_permission来给相应用户赋权限.

下面是在windows环境下操作:

C:\Documents and Settings\Administrator>tasklist | find "calc"

先确认系统当前没有运行计算器程序.

好,让我们来用刚建立的plsql函数execmd来运行这个计算器程序.

C:\Documents and Settings\Administrator>sqlplus / as sysdba

SQL*Plus: Release 11.2.0.1.0 Production on 星期三 7月 10 17:26:17 2013

Copyright (c) 1982, 2010, Oracle. All rights reserved.


连接到:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

17:26:17 SYS@orcl> select execmd('calc') from dual;

EXECMD('CALC')
-----------------------------------------------------------------------------------------

OK!

已用时间: 00: 00: 00.06
17:26:37 SYS@orcl> host
Microsoft Windows XP [版本 5.1.2600]
(C) 版权所有 1985-2001 Microsoft Corp.

C:\Documents and Settings\Administrator>tasklist | find "calc"
calc.exe 12000 Console 0 3,052 K

好了,我们看到计算器程序已经在运行了,但是非常不如意的是,没有界面出来。。

我猜想可能是由于Oracle最早是基于linux开发,而且和MS是死对头(相关信息请查询Oracle的发家史...),所以没有考虑过支持WIN界面.

--

不过就算这样,也很方便了,我们可以建立定时JOB,通过PL/SQL来调用OS上的任何程序/脚本等做相关的任务了.

下载本文
显示全文
专题