Oracle 11g:osutil软件包; CentOS 7上没有PATH?

时间:2018-12-05 21:52:28

标签: c oracle plsql oracle11g

我试图在Oracle 11g中通过PL / SQL调用外部程序。 This是共享库的C代码,this是其对应的PL / SQL包装器。

假设我要执行Unix的ps -A命令。这是我得到的:

Connected to Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 
Connected as sys@orcl AS SYSDBA

SQL> set serveroutput on;
SQL> exec osutil.RunOsCmd('ps -A');

ERROR, bad command or no output returned...
ERROR, bad command or no output returned...

PL/SQL procedure successfully completed

我对此感到奇怪的是,我应该exec osutil.RunOsCmd('echo This works, but ps does not?!?');来代替,它给了我命令的输出,就像应该这样:

This works, but ps does not?!?

PL/SQL procedure successfully completed

让我们尝试回显$ ORACLE_HOME ...

SQL> exec osutil.RunOsCmd('echo $ORACLE_HOME');

/home/oracle/app/oracle/product/11.2.0/dbhome_1

PL/SQL procedure successfully completed

现在让我们尝试回显$ PATH ...

SQL> exec osutil.RunOsCmd('echo $PATH');



PL/SQL procedure successfully completed

在我看来,库的popen命令在通过Oracle的extproc执行时会调用sh shell,而$ PATH中没有任何内容。

知道为什么会这样吗?我想从Oracle执行ps -A,而不指定命令的完整路径,即/bin/ps -A

1 个答案:

答案 0 :(得分:0)

我设法通过将以下行添加到我的extproc.ora文件中来解决问题,对于我来说,该文件位于/home/oracle/app/oracle/product/11.2.0/dbhome_1/hs/admin下:

SET PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin

Oracle 11g的extproc确实确实未设置PATH环境变量;实际上,似乎extproc有自己的环境,只能通过上述extproc.ora文件进行配置。