Oracle SQL 运行批处理
Posted
技术标签:
【中文标题】Oracle SQL 运行批处理【英文标题】:Oracle SQL run batch 【发布时间】:2020-02-10 11:09:23 【问题描述】:所以我们要做的是创建一个执行批处理文件的过程。
我们一直在搞乱工作指导,但它似乎无法正常工作。
CREATE OR REPLACE PROCEDURE launch_bat AS
BEGIN
DBMS_SCHEDULER.create_job ('Export_Case_Job',
job_action => 'C:\WINDOWS\SYSTEM32\CMD.EXE',
number_of_arguments => 3,
job_type => 'executable',
enabled => FALSE);
DBMS_SCHEDULER.set_job_argument_value ('Export_Case_Job', 1, '/q');
DBMS_SCHEDULER.set_job_argument_value ('Export_Case_Job', 2, '/c');
DBMS_SCHEDULER.set_job_argument_value ('Export_Case_Job', 3, 'C:\scripts\helloFolder.bat');
DBMS_SCHEDULER.enable ('Export_Case_Job');
END;
/
call launch_bat;
它说它已编译,但我们在文件夹中看不到任何结果。我们还尝试在调用中提供文件名。
我们有 Oracle 10.2,所以我们不能使用 exec xp_cmdshell
。
为什么是程序?当我们获得新的收入数据时,我们将执行一个触发器,该触发器将用于批处理文件,该批处理文件将在我们的文件夹中创建某些信息作为测试目的。
主要是oracle sql执行一个批处理文件。
批次内容
ECHO OFF
mkdir C:\scripts\folder
提前致谢!
【问题讨论】:
那么批处理文件的内容在哪里呢?这只是 plsql 代码.. @GerhardBarnard 出于测试目的,目前它只会创建文件夹。ECHO OFF mkdir C:\scripts\folder
我还需要至少看到内容才能看到完整的图片才能回答
感谢您的更改。当您可以直接调度批处理文件时,您调用cmd的原因是什么?
批处理文件需要存在于Oracle服务器上,而不是本地计算机上
【参考方案1】:
当我将您的示例与文档 https://docs.oracle.com/cd/E11882_01/server.112/e25494/scheduse.htm#CHDJHBAH 中的示例进行比较时:
BEGIN
DBMS_SCHEDULER.CREATE_JOB(
job_name => 'MKDIR_JOB',
job_type => 'EXECUTABLE',
number_of_arguments => 3,
job_action => '\windows\system32\cmd.exe',
auto_drop => FALSE,
credential_name => 'TESTCRED');
DBMS_SCHEDULER.SET_JOB_ARGUMENT_VALUE('mkdir_job',1,'/c');
DBMS_SCHEDULER.SET_JOB_ARGUMENT_VALUE('mkdir_job',2,'mkdir');
DBMS_SCHEDULER.SET_JOB_ARGUMENT_VALUE('mkdir_job',3,'\temp\extjob_test_dir');
DBMS_SCHEDULER.ENABLE('MKDIR_JOB');
END;
/
-
可执行文件与可执行文件
\windows\system32\cmd.exe vs C:\WINDOWS\SYSTEM32\CMD.EXE
所以我希望您必须将 job_type 写成大写。可能是 job_action 小写,但我不确定那里。
如果错误出现在其他地方,您必须检查:
*_SCHEDULER_JOB_LOG
*_SCHEDULER_JOB_RUN_DETAILS
我可以在哪里找到足够的信息来使用 mkdir 将示例从文档迁移到 linux。
【讨论】:
您好,您的回答是正确的。我一直在处理其他事情时遇到麻烦,但这个事情成功了一半。谢谢。以上是关于Oracle SQL 运行批处理的主要内容,如果未能解决你的问题,请参考以下文章
如何将 SQL 结果生成到 Excel 工作表 (Oracle)