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)

Oracle SQL Developer:运行脚本,出错时继续

ORACLE PL/SQL编程总结

Oracle的PL_SQL的异常处理

我有一堆sql文件需要运行 如何批量运行

Oracle存储过程的异常处理