【发布时间】: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