热门标签 | HotTags
当前位置:  开发笔记 > 数据库 > 正文

使用PL/SQL执行OS命令

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

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上的任何程序/脚本等做相关的任务了.


推荐阅读
  • 本文介绍了在Hibernate配置lazy=false时无法加载数据的问题,通过采用OpenSessionInView模式和修改数据库服务器版本解决了该问题。详细描述了问题的出现和解决过程,包括运行环境和数据库的配置信息。 ... [详细]
  • Metasploit攻击渗透实践
    本文介绍了Metasploit攻击渗透实践的内容和要求,包括主动攻击、针对浏览器和客户端的攻击,以及成功应用辅助模块的实践过程。其中涉及使用Hydra在不知道密码的情况下攻击metsploit2靶机获取密码,以及攻击浏览器中的tomcat服务的具体步骤。同时还讲解了爆破密码的方法和设置攻击目标主机的相关参数。 ... [详细]
  • 在说Hibernate映射前,我们先来了解下对象关系映射ORM。ORM的实现思想就是将关系数据库中表的数据映射成对象,以对象的形式展现。这样开发人员就可以把对数据库的操作转化为对 ... [详细]
  • 本文介绍了Oracle数据库中tnsnames.ora文件的作用和配置方法。tnsnames.ora文件在数据库启动过程中会被读取,用于解析LOCAL_LISTENER,并且与侦听无关。文章还提供了配置LOCAL_LISTENER和1522端口的示例,并展示了listener.ora文件的内容。 ... [详细]
  • 基于PgpoolII的PostgreSQL集群安装与配置教程
    本文介绍了基于PgpoolII的PostgreSQL集群的安装与配置教程。Pgpool-II是一个位于PostgreSQL服务器和PostgreSQL数据库客户端之间的中间件,提供了连接池、复制、负载均衡、缓存、看门狗、限制链接等功能,可以用于搭建高可用的PostgreSQL集群。文章详细介绍了通过yum安装Pgpool-II的步骤,并提供了相关的官方参考地址。 ... [详细]
  • 本文介绍了使用CentOS7.0 U盘刻录工具进行安装的详细步骤,包括使用USBWriter工具刻录ISO文件到USB驱动器、格式化USB磁盘、设置启动顺序等。通过本文的指导,用户可以轻松地使用U盘安装CentOS7.0操作系统。 ... [详细]
  • 在Docker中,将主机目录挂载到容器中作为volume使用时,常常会遇到文件权限问题。这是因为容器内外的UID不同所导致的。本文介绍了解决这个问题的方法,包括使用gosu和suexec工具以及在Dockerfile中配置volume的权限。通过这些方法,可以避免在使用Docker时出现无写权限的情况。 ... [详细]
  • 本文介绍了Python高级网络编程及TCP/IP协议簇的OSI七层模型。首先简单介绍了七层模型的各层及其封装解封装过程。然后讨论了程序开发中涉及到的网络通信内容,主要包括TCP协议、UDP协议和IPV4协议。最后还介绍了socket编程、聊天socket实现、远程执行命令、上传文件、socketserver及其源码分析等相关内容。 ... [详细]
  • Mac OS 升级到11.2.2 Eclipse打不开了,报错Failed to create the Java Virtual Machine
    本文介绍了在Mac OS升级到11.2.2版本后,使用Eclipse打开时出现报错Failed to create the Java Virtual Machine的问题,并提供了解决方法。 ... [详细]
  • win10系统搭建Java开发环境的操作方法
    本文介绍了win10系统搭建Java开发环境的详细操作方法,包括下载Windows10系统和Java SE,安装Java开发环境,设置变量等步骤。操作简单,只需按照指导进行即可。 ... [详细]
  • 本文介绍了在Win10上安装WinPythonHadoop的详细步骤,包括安装Python环境、安装JDK8、安装pyspark、安装Hadoop和Spark、设置环境变量、下载winutils.exe等。同时提醒注意Hadoop版本与pyspark版本的一致性,并建议重启电脑以确保安装成功。 ... [详细]
  • 【Windows】实现微信双开或多开的方法及步骤详解
    本文介绍了在Windows系统下实现微信双开或多开的方法,通过安装微信电脑版、复制微信程序启动路径、修改文本文件为bat文件等步骤,实现同时登录两个或多个微信的效果。相比于使用虚拟机的方法,本方法更简单易行,适用于任何电脑,并且不会消耗过多系统资源。详细步骤和原理解释请参考本文内容。 ... [详细]
  • 本文介绍了在SpringBoot中集成thymeleaf前端模版的配置步骤,包括在application.properties配置文件中添加thymeleaf的配置信息,引入thymeleaf的jar包,以及创建PageController并添加index方法。 ... [详细]
  • 本文讲述了作者通过点火测试男友的性格和承受能力,以考验婚姻问题。作者故意不安慰男友并再次点火,观察他的反应。这个行为是善意的玩人,旨在了解男友的性格和避免婚姻问题。 ... [详细]
  • macOS10.12安装win10系统教程,实现双系统安装
    本文介绍了如何在macOS10.12系统上安装win10系统,实现双系统的安装。通过使用Boot Camp助理,选取win10系统镜像并分配系统容量,然后进行安装。安装完win10系统后,安装驱动并重启系统即可完成双系统的安装。 ... [详细]
author-avatar
心跳-很执着
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有