Welcome 微信登录

首页 / 数据库 / MySQL / 使用PL/SQL执行OS命令

pl/sql做为sql语言的一种补充语言,其优势自然是在处理数据方面,但是随着PL/SQL的不断成长,尤其是和JAVA语言的联系越来越紧密,这使得PL/SQL也能完成一些高级应用操作了。之前也有介绍使用PL/SQL执行java存储来获得MAC地址的 http://www.linuxidc.com/Linux/2013-04/83498.htm这里方法也类似,只是需要传入命令参数.同样首先创建java sourcecreate 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 soureCREATE 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 <<ALL FILES>> execute) has not been granted to SCOTT. The PL/SQL to grant this is dbms_java.grant_permission( "SCOTT", "SYS:java.io.FilePermission", "<<ALL FILES>>", "execute" )如果确实需要其他用户来执行,可以使用dbms_java.grant_permission来给相应用户赋权限.下面是在windows环境下操作:C:Documents and SettingsAdministrator>tasklist | find "calc"先确认系统当前没有运行计算器程序.好,让我们来用刚建立的plsql函数execmd来运行这个计算器程序.C:Documents and SettingsAdministrator>sqlplus / as sysdbaSQL*Plus: Release 11.2.0.1.0 Production on 星期三 7月 10 17:26:17 2013Copyright (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 options17: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 SettingsAdministrator>tasklist | find "calc"
calc.exe                 12000 Console               0      3,052 K好了,我们看到计算器程序已经在运行了,但是非常不如意的是,没有界面出来。。。我猜想可能是由于Oracle最早是基于linux开发,而且和MS是死对头(相关信息请查询Oracle的发家史...),所以没有考虑过支持WIN界面.--不过就算这样,也很方便了,我们可以建立定时JOB,通过PL/SQL来调用OS上的任何程序/脚本等做相关的任务了.手动创建Oracle数据库实例在SQL中使用PL/SQL函数存在的问题相关资讯      PL/SQL 
  • PL/SQL之存储过程和函数  (今 14:09)
  • PL/SQL Developer连接本地Oracle   (07月27日)
  • 【PL/SQL系列】Oracle存储过程使用  (04月23日)
  • PL/SQL Developer 使用技巧分享  (09月16日)
  • PL/SQL实现Java中的split()方法的  (07月10日)
  • 从一个案例看PL/SQL代码片的编译与  (03月04日)
本文评论 查看全部评论 (0)
表情: 姓名: 字数