oracle存储过程中调用一个shell脚本,用于进行一些操作,已经赋权限,但是执行不了 20

主程序:createorreplaceprocedurerun_ls_data_run_single_step(curOUTRefCursorPkg.tRefCursor... 主程序:
create or replace procedure run_ls_data_run_single_step(
cur OUT RefCursorPkg.tRefCursor --定义游标变量
) is
x clob;
v_command varchar2(5000); --要传入java执行的shell命令
begin

v_command:='sh /home/etl/ETL_Automation/ETL_PLUS/batch/qijie/batch.sh 111';
x := run_cmd_ls(to_char(v_command));
OPEN cur FOR
select 1 返回结果 from dual;

end run_ls_data_run_single_step;
执行shell程序:
create or replace function RUN_CMD_LS(p_cmd in varchar2) return varchar2
as
language java
name 'LSUtil.RunThis(java.lang.String) return java.lang.String';
create or replace and compile java source named lsutil as
import java.io.*;
public class LSUtil extends Object{
public static String RunThis(String args){
int rc = -1;
String command = " ";
StringBuffer bf = new StringBuffer();
try {
command=command+args;
Runtime rt = Runtime.getRuntime();
Process p = null;
p = rt.exec(command);
BufferedReader br = new BufferedReader(new InputStreamReader(p.getInputStream()));
String msg = null;
while((msg = br.readLine())!=null){
bf.append(msg).append("\n");
}
br.close();
rc = p.waitFor();
if(rc==0){
return bf.toString();
}else{
return "error!";
}
} catch (InterruptedException e) {
e.printStackTrace();
rc = -1;
} finally{
return bf.toString();
}
}
}

batch.sh代码:
#!/bin/sh
echo $1>test.log;
exit;
问题是:我现在用rasetl用户登录linux系统,给batch.sh赋777权限,现在在pl/sql中用etl_user用户登录,执行 run_ls_data_run_single_step存储过程,无法对test.log进行更新,batch.sh没有执行,请问怎么办?哪儿出问题了?在线等!谢谢!
展开
 我来答
ywb521hlj
2013-04-25 · TA获得超过164个赞
知道小有建树答主
回答量:306
采纳率:0%
帮助的人:174万
展开全部
shell的环境变量问题,你在shell内部的变量是获取不到外部执行结果的。
追问
我不需要知道执行结果,我只需要调起shell,使得shell能执行就可以了。
那个反悔的结果只是个标识,没有意义的。
现在不指知道是环境变量的问题 还是权限的问题。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
任好慕jx
2013-04-25 · TA获得超过1516个赞
知道小有建树答主
回答量:1027
采纳率:66%
帮助的人:473万
展开全部
想想SQLPLUS下的执行是否成功。如果不成功,就一个一个的看,先看SH,如果没有问题再看过程,过程没有问题再看JAVA。
更多追问追答
追问
在pl/sql中程序肯定是没问题的,问题是执行不了shell,从而更新不了test.log文件。
追答
SH是手工执行成功不  了?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
wdjhwlc
2013-04-25 · TA获得超过457个赞
知道小有建树答主
回答量:759
采纳率:0%
帮助的人:450万
展开全部
试试把要更改的文件test.log附上权限 可能是你的sh脚本没有执行test.log的权限吧?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
溜夜time
2014-07-31
知道答主
回答量:1
采纳率:0%
帮助的人:1352
展开全部
请问你的问题解决了吗
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式