oracle的存储过程中调用shell

Gospelanswer 2014-11-22 10:32:21
先贴一下我自己的测试代码,之前在网上查的。但是始终测试不对。请哪位大神帮忙看看。注意是proc调shell。不是shell调proc!!测试机y有jre,但是没有jdk。不知道是不是这个的原因。之前有个包的实现,也做了测试。最后跑job的时候也报错。
1,先写一个java source
create or replace and compile java source named execshellcmd as
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;

public class Execshellcmd {
public static String callShell(String path) {
String message = "";

try {
Process process = Runtime.getRuntime().exec(path);
int waitFor = process.waitFor();

InputStream is = process.getErrorStream();
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
String line = null;
while ((line = br.readLine()) != null) {
message += line;
}

message += " Process waitFor=" + waitFor;
int exitValue = process.exitValue();
message += " Process exitValue=" + exitValue;
} catch (Exception e) {
message = e.getMessage();
e.printStackTrace();
}

return message;
}

}
2,写一个函数去调用java source
create or replace function fun_callshell (p_command IN VARCHAR2) return varchar2
AS LANGUAGE JAVA
NAME'Execshellcmd.callShell (java.lang.String) return java.lang.String';
3,执行一个脚本,脚本内容就是创建一个文件 echo aaa>b.txt
select fun_callshell (‘home/oracle/b.sh’) from dual;
执行结果:
exec failed: /home/oracle/b.sh, Exec format error Process waitFor=255 Process exitValue=255


...全文
1540 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
lixiaoding11 2016-04-14
  • 打赏
  • 举报
回复
试试exec dbms_java.grant_permission( 'TEST', 'SYS:java.io.FilePermission','/test/*', 'read,write' );
dilemmapr 2014-12-10
  • 打赏
  • 举报
回复
shell里面再把环境变量export下
Gospelanswer 2014-11-26
  • 打赏
  • 举报
回复
引用 4 楼 wildwave 的回复:
系统命令能成功调用并看到结果了? 注意下路径和环境变量
java的环境变量测试过没有问题。单独用这个类在linux下调用shell也能成功,就是一移到数据库里就不行了。 路径是在根目录下建了个test文件夹,给了oracle的属组和777的权限。 实在想不通还有哪需要注意的了。。
小灰狼W 2014-11-25
  • 打赏
  • 举报
回复
系统命令能成功调用并看到结果了? 注意下路径和环境变量
Gospelanswer 2014-11-25
  • 打赏
  • 举报
回复
引用 2 楼 wildwave 的回复:
对java不熟悉。Oracle可以用java存储过程调用服务器中的shell脚本。原先测试过 要注意权限问题 ‘home/oracle/b.sh’ 这个路径有点奇怪
权限都给了777,现在调试的传linux下的命令是可以调用的了,比如ls,ifconfig等。但是自己写的脚本也能调用到。但是不会成功执行。很奇怪。。。单独执行脚本是没问题的。
小灰狼W 2014-11-25
  • 打赏
  • 举报
回复
对java不熟悉。Oracle可以用java存储过程调用服务器中的shell脚本。原先测试过 要注意权限问题 ‘home/oracle/b.sh’ 这个路径有点奇怪
Gospelanswer 2014-11-24
  • 打赏
  • 举报
回复
没有大神解答一下么

3,496

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 高级技术相关讨论专区
社区管理员
  • 高级技术社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧