【问题标题】:Trying to call ksh from plsql procedure试图从 plsql 过程中调用 ksh
【发布时间】:2016-08-24 14:50:22
【问题描述】:

需要从具有 4 个输入变量的过程执行 test.ksh,从脚本到过程需要一个输出变量值。在网上找不到太多关于此的内容。任何人都可以建议如何实现。

经过分析,我尝试了以下方法来实现仍然没有运气。在 Java 类下面加载到 Oracle DB。

import java.io.BufferedReader;
import java.io.InputStreamReader;

public class KSHCommand {

public static String executeCommand(Long param1,String param2,Long param3, Integer param4) {

    StringBuffer output = new StringBuffer();

    Process p;
    try {
    String finalCommand = "Filesystempath/test.ksh";
        p = Runtime.getRuntime().exec(finalCommand);
        p.waitFor();
        BufferedReader reader = 
                       new BufferedReader(new InputStreamReader(p.getInputStream()));

        String line = "";           
        while ((line = reader.readLine())!= null) {
            output.append(line + "\n");
        }

    } catch (Exception e) {
        e.printStackTrace();
    }

    return output.toString();

  }

}

test.ksh

out=`/usr/bin/java test`
echo $out

下面是定义调用java方法的函数

    CREATE OR REPLACE FUNCTION testfun(param1 IN NUMBER,param2 IN   VARCHAR2,param3 IN NUMBER,param4 IN NUMBER) RETURN VARCHAR2 AS
    LANGUAGE JAVA NAME 'KSHCommand.executeCommand(java.lang.Long, java.lang.String, java.lang.Long,java.lang.Integer) return java.lang.String';
 /;

下面是返回空数据的查询

 SELECT testfun(5,'test1',6,7) FROM DUAL;
  testfun()
  ------------------------------------------------

如果使用 ./test.ksh 从文件系统执行相同的 java 文件,将在终端中得到输出 test

如果它是从函数执行的脚本,请告诉我是否遗漏了什么。

提前致谢

【问题讨论】:

    标签: plsql oracle11g ksh plsqldeveloper database-administration


    【解决方案1】:

    使用 dbms_scheduler - 包创建一个带有 4 个参数的外部作业,传入参数然后运行它。 一个简短且易于理解的示例,您可以在此处找到 https://tinky2jed.wordpress.com/technical-stuff/oracle-stuff/creating-an-oracle-job-that-runs-an-os-executable/ 或此处(对于 Windows,但它与 UX 非常相似)https://mikesmithers.wordpress.com/2012/06/12/running-a-windows-batch-file-from-dbms_scheduler/

    【讨论】:

    • 是的,我检查了,因为某些安全性我们的架构没有执行 dbms_scheduler 的特权
    猜你喜欢
    • 2015-03-09
    • 1970-01-01
    • 2018-09-09
    • 2013-04-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多