Oracle存储过程调用bat批处理脚本程序

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/samile6899/article/details/55512436

        由于系统业务的复杂性,会经常用到Oracle数据的存储过程,那些比较复杂的逻辑就写在了存储过程中。今天有遇到一个需求,是需要在存储过程中调用windows系统上的bat批处理文件,之前做的都是java进行调用 .bat 批处理脚本程序,现在是需要在Oracle 的存储过程中进行调用系统的 .bat 脚本。第一感觉挺复杂了,后来完成了也就没什么了,挺简单的。经验教程记下来,后续如果需要使用的话,直接来找就可以了,当然也帮助了那些有同样需要的同志们。

        1,首先要创建Java source

create or replace and compile java source named exesyscommand as
import java.io.*;
public class ExeSysCommand
{
  public static String ExeCmd(String cmd) {
        Process proc = null;
        int exitValue;
        try {
            System.out.println(cmd);
            proc = Runtime.getRuntime().exec(cmd);
            exitValue = proc.waitFor();
            if (exitValue == 0) {
               return "PASS";
            } else {
               return "FAIL";
            }
        } catch (Exception e) {
            return e.getMessage();
        }
    }
    public static void main(String[] args)
    {
        System.out.println("No command line arguments");
        System.out.println(ExeCmd("D:\\01_import.bat"));
        System.out.println("No command line arguments");
    }
}

        2,其后要创建函数调用该Java source

CREATE OR REPLACE FUNCTION ExeCmd(cmd STRING) RETURN VARCHAR2 IS --执行OS命令测试
  LANGUAGE JAVA NAME ' ExeSysCommand.ExeCmd(java.lang.String) return java.lang.String';
        3,DBA登录数据库并授权数据库的某一用户
exec dbms_java.grant_permission( 'JYCRMX', 'SYS:java.io.FilePermission', 'D:\01_import.bat', 'execute');

exec dbms_java.grant_permission( 'JYCRMX', 'SYS:java.io.FilePermission', '<>', 'execute');
        4,自己写一个简单的.bat批处理文件(本机放在D盘)
md d:\name777
exit
        5,打开PL/SQL或者CMD控制台下进行测试
select execmd('D:\run.bat') from dual; 
      最后,出来的结果是这样的
 
     
       OK,大功告成,接下来就是把这个自定义的函数给放到存储过程中就完了。
       存储过程什么的就不写了,资源文件都上传到CSDN上了( http://download.csdn.net/detail/samile6899/9756986),大家可以下载下来看看,多试几次就OK了!



    

猜你喜欢

转载自blog.csdn.net/samile6899/article/details/55512436