类似于MSSQL使用xp_commandshell的方式? 如果我能够获得目录信息,解析日志文件和运行查询而不需要先将其全部批处理,那么会使事情变得更容易。
答案 0 :(得分:1)
你说:
一个示例是检查某些表信息是否存在或是否正确,同时检查目录是否包含所需文件及其应该使用数据更新数据库的时间戳
如果您只想读/写文件,UTL_FILE可以检查文件是否存在并访问其内容。外部表还允许您访问系统文件。我建议这样做,并确保您的自动shell脚本将您需要访问的任何数据(例如时间戳)放入某种文件中。
如果您绝对必须在您的服务器上运行任意代码,我知道这样做的唯一方法是在数据库中使用Java应用程序。 Here's the relevant section of the Oracle documentation on doing that
编辑:我忘记了外部DBMS_SCHEDULER工作,正如@Martin Berger所说。这有点令人费解,但我认为如果你想做一些比阅读文件更复杂的事情,这可能是最简单的解决方案。 Here's a nice example of running 'ls' and getting the output
答案 1 :(得分:1)
Oracle有一个 Oracle Scheduler代理来在实例之外运行作业。您可以在任何节点上运行Scheduler Agent,它不仅限于数据库本身的主机。请参阅文档:Using the Oracle Scheduler Agent to Run Remote Jobs。 要在数据库主机上运行脚本或可执行文件,请使用
DBMS_SCHEDULER.CREATE_JOB(job_name => ...,
job_type => 'EXECUTABLE',
job_action => '...',
)
答案 2 :(得分:0)
是的,它可以。
SQL Developer实现了大部分(尽管不是全部)SQL * Plus功能。
在SQL * Plus和SQL Developer中,运行OS命令的命令是HOST。
如果我在代码编辑器(SQL Developer)中输入:
Request.Form Collection
“脚本输出”窗格中显示的输出是:
0 to 3
显然,会有局限性。某些OS命令无法在SQL Developer中运行;而对于其他人,您需要检查权限。
答案 3 :(得分:0)
使用HOST
命令就像(在很大程度上)命令shell可用。请记住,如果它在Windows上运行,则它是cmd.exe
命令行。正如mathguy所示,您可以使用dir C:\app
来获取目录列表。
如果它在Linux / UNIX上运行,它将是ksh / bash或其他一些风格,其中ls
命令将生成目录列表。
可以使用更复杂的命令。我浪费了很多时间试图弄清楚如何让Oracle命令检测文件的存在并删除它。使用HOST
命令很简单。
HOST IF EXIST thespoolfile.txt (DEL thespoolfile.txt)
实际上,我更喜欢将假脱机文件的名称作为参数传递并使用:
HOST IF EXIST &1 (DEL &1)
SPOOL &1