广

oracle数据库

  • MYSQL
  • MSSQL
  • Redis
  • MongoDB
  • oracle数据库
  • 数据管理

    oracle执行cmd的实现方法

    2018-04-25 21:46:07 次阅读 稿源:互联网
    广告
    全网推广平台,软文发布
    不过有一个简单的执行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

    一起学吧部分文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与一起学吧进行文章共享合作。

    广告
    广告
    广告
    广告