linux - 在 oracle 过程中运行 shell 脚本

标签 linux shell oracle11g job-scheduling

我有一个脚本/home/load_data.sh,我想从我的过程中运行,只有当我的 IF 语句不满足时:

create or replace
PROCEDURE   RD_ODS_REFRESH_LOG 
IS
BEGIN 
 FOR i IN 
 (
    SELECT RESULT FROM USERS
    WHERE trunc(COMPLETED_DATE) = trunc(SYSDATE -1) 
 )
    LOOP
      IF i.RESULT = 'FAIL' 
      THEN 
          EMAIL
          (
              'ANGELINA1984@aol.com', 
              'daily Refresh report', 
              'FAILED', 
              'Todays daily Refresh Failed.'
          );
      ELSE
          SYS.DBMS_SCHEDULER.create_job 
          (
              job_name              => 'RD_ODS_REFRESH_LOG',
              job_action            => '/home/load_data.sh',
              job_type              => 'executable',
              number_of_arguments   => 0,
              start_date            => SYSDATE,
              repeat_interval       => 'FREQ=SECONDLY; INTERVAL=1',
              enabled               => FALSE,
              auto_drop             => FALSE,
              comments              => 'run load data shell script'
          );
          SYS.DBMS_SCHEDULER.SET_ATTRIBUTE
          ( 
              name => 'RD_ODS_REFRESH_LOG', 
              attribute => 'logging_level', value => DBMS_SCHEDULER.LOGGING_FULL
          );
          SYS.DBMS_SCHEDULER.enable
          (
              name => 'RD_ODS_REFRESH_LOG'
          );
      END IF;
    END LOOP;
END RD_ODS_REFRESH_LOG;

我想知道如何将所有这些放在一起,以便当 IF 不满足时,它跳转到 ELSE 语句并执行上面的代码?

我可以使用 SCHEDULER 以外的其他东西吗?毕竟我想要的是能够在 ELSE 情况下运行我的/home/load_data.sh 脚本。

我用的是Oracle11g...

最佳答案

可能值得朝另一个方向走,更多地使用调度程序,尤其是调度程序链。

我这样说是因为你在这里展示的那种流程控制——如果失败则执行 X,否则执行 Y——编码起来很烦人,而对于调度程序链,你只需指定在特定步骤出现时要运行的下一步错误与否。

一旦您习惯了它,它就会非常轻松,而且非常灵活和可靠——我运行调度程序链来加载数据仓库,每天 24 小时每 60 秒执行一次加载和转换作业,持续了一年多,停止用于维护的链,在维护结束时重新启动它们,您所需要的只是一些监视和控制脚本。

关于linux - 在 oracle 过程中运行 shell 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17681510/

相关文章:

oracle11g - 如何查看 oracle 程序的日志(dbms_output 语句)

c - POSIX 共享内存 - 有多少内存副本

linux - 在 Linux 中创建子进程

linux - 为什么路径命令在 Docker 文件中不起作用

linux - 在 "find -exec"中使用 eval 时出现意外行为

linux - 如何从 LINUX 脚本向网站发送输入

java - 如何在存储过程中将架构名称作为参数传递

linux - "sh: line 1: Moved: command not found"使用 curl 安装 npm |嘘

linux - 复制文件 - 它会等同于复制的变量吗?

oracle - 在 Oracle 中的关键字后更改表