c - 甲骨文11g : osutil package; no PATH on CentOS 7?

标签 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,其 $ 中没有任何内容路径。

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

最佳答案

我通过将以下行添加到我的 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 文件进行配置。

关于c - 甲骨文11g : osutil package; no PATH on CentOS 7?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53641312/

相关文章:

Oracle:在过程中返回带有游标的大型数据集

c - 来自 sscanf 的有趣行为

c - 使用 pthreads 在结构中传递函数指针

oracle - 对函数调用(堆栈框架)中的类型强制感到困惑

database - 更改 Oracle 中的主键值

sql - NULL 可以像 SQL 中的 NOT NULL 一样成为约束吗?

sql - 甲骨文 SQL : Show n rows for each id

regex - 如何返回字符串中的第 n 个正则表达式匹配项?

c - 有了操作系统安全性和执行禁用功能,用 C 语言编程是否变得更容易了?

c - 指针对齐问题的原因是什么?