Я пытаюсь вызывать внешние программы через PL / SQL в Oracle 11g. Этот является кодом C общей библиотеки, а этот является соответствующей оболочкой PL / SQL для него.
Давайте предположим, что я хочу выполнить команду ps -A
Unix,Вот что я получил:
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
без чего-либо в ее переменной $ PATH.
Есть идеи, почему это происходит?Я хотел бы выполнить ps -A
из Oracle без указания полного пути к команде, то есть /bin/ps -A
.