如何从 PL/SQL 调用 .exe?

Posted

技术标签:

【中文标题】如何从 PL/SQL 调用 .exe?【英文标题】:How to call a .exe from PL/SQL? 【发布时间】:2015-03-12 15:50:31 【问题描述】:

我已授予以下权限,并且调用 CMD.EXE 似乎可以正常工作,如下面的代码示例所示。

但是,我无法从whoami.exe 获得任何输出。我可以看到默认目录是C:\app\oramgr\product\12.1.0\dbhome_1\database\,它出现在JJJ.TXT 文件中。但是,JJJ_WHOAMI.TXT 文件不包含任何内容。

有什么建议吗?

dbms_java.grant_permission('PWATSON', 'SYS:java.io.FilePermission', 'C:\WINDOWS\SYSTEM32\CMD.EXE', 'execute');
dbms_java.grant_permission('PWATSON', 'SYS:java.io.FilePermission', 'C:\Windows\System32\whoami.exe', 'execute');
dbms_java.grant_permission('PWATSON', 'SYS:java.lang.RuntimePermission', '*', 'writeFileDescriptor');
dbms_java.grant_permission('PWATSON', 'SYS:java.lang.RuntimePermission', '*', 'readFileDescriptor');

dbms_java.grant_permission('PWATSON', 'SYS:java.io.FilePermission', 'C:\Users\pwatson', 'read, write');
dbms_java.grant_permission('PWATSON', 'SYS:java.io.FilePermission', 'C:\Users\pwatson\*', 'read, write');
dbms_java.grant_permission('PWATSON', 'SYS:java.io.FilePermission', 'C:\temp', 'read');

SQL> select util.RUN_CMD('C:\WINDOWS\system32\cmd.EXE /c CD C:\Users\pwatson\src\java ^& ECHO ^%CD^% ^& EXIT 4') as y from dual;
         Y
----------
         4

C:\app\oramgr\product\12.1.0\dbhome_1\DATABASE
SQL> select util.RUN_CMD('C:\WINDOWS\system32\cmd.EXE /c ECHO ^%CD^% >jjj.txt ^& EXIT 7') as y from dual;
         Y
----------
         7

SQL> select util.RUN_CMD('C:\WINDOWS\system32\cmd.EXE /c C:\Windows\System32\whoami.exe >jjj_whoami.txt') as y from dual;
         Y
----------
         0


C:\app\oramgr\product\12.1.0\dbhome_1\database>type JJJ.TXT
C:\app\oramgr\product\12.1.0\dbhome_1\DATABASE

C:\app\oramgr\product\12.1.0\dbhome_1\database>type JJJ_WHOAMI.TXT

【问题讨论】:

什么 windows 用户正在运行数据库服务器服务?要进行测试,请尝试在另一个窗口中运行该服务并再次尝试运行该语句。 当我之前在 PDB 上看到它时,它是“oracle”用户。在非 PDB 安装上,它是“oramgr”。 “另一个 Windows”是什么意思? 你用的是什么windows版本? asktom.oracle.com/pls/apex/… 当 Oracle 在 Windows 上运行 whoami 时,它可能是个无名小卒? 【参考方案1】:

当 Oracle 在 Windows 上运行 whoami 时,它可能是个无名小卒?好主意是更改启动服务的用户。


第三次调用与第二次略有不同。你没有要求退出。

试试下面的:

select util.RUN_CMD('C:\WINDOWS\system32\cmd.EXE /c C:\Windows\System32\whoami.exe >jjj_whoami.txt ^& EXIT 8') as y from dual;

【讨论】:

以上是关于如何从 PL/SQL 调用 .exe?的主要内容,如果未能解决你的问题,请参考以下文章

如何从 Javascript 函数中调用 PL/SQL 变量?

如何从 R 调用存储在 Oracle 数据库中的 PL/SQL 过程

oracle SQL语句中怎么样调用存储过程

使用 callproc 从 django 调用 PL/SQL 过程

调用从 Hibernate 返回记录列表的 PL/SQL 函数

从 Java 调用 PL/SQL Web Toolkit 过程