新手使用Oracle Scheduler根据事件启动作业

新手使用Oracle Scheduler根据事件启动作业,oracle,Oracle,我在Oracle11.2数据库中有一个表。如果table1中的特定单元格更新为值1,并且table2中的现有行数>0,我希望数据库在远程服务器上运行可执行文件。我对数据库中可能发生的事情没有太多经验——下面的方法可以实现这一点吗 使用Oracle调度程序创建作业。作业立即运行,并用于在远程服务器上运行外部可执行程序。作业存在,但直到下面的步骤5才运行(这是否可能?)。 将DML触发器附加到在UPDATE语句上激发的表的列。 让触发器调用PL/SQL子程序 在PL/SQL子程序中,执行以下业

我在Oracle11.2数据库中有一个表。如果table1中的特定单元格更新为值1,并且table2中的现有行数>0,我希望数据库在远程服务器上运行可执行文件。我对数据库中可能发生的事情没有太多经验——下面的方法可以实现这一点吗

  • 使用Oracle调度程序创建作业。作业立即运行,并用于在远程服务器上运行外部可执行程序。作业存在,但直到下面的步骤5才运行(这是否可能?)。

  • 将DML触发器附加到在UPDATE语句上激发的表的列。

  • 让触发器调用PL/SQL子程序

  • 在PL/SQL子程序中,执行以下业务逻辑:如果表1中的特定单元格等于1,并且如果表2中的行数大于0,则继续执行步骤5,否则停止(退出,退出)

  • 在步骤1中运行作业

  • 或者,如果作业/调度程序不提供此功能,是否有其他方法实现相同的功能?也就是说,数据库表中的更改会触发外部作业

    更新1:

    我想知道是否可以通过使用Oracle Scheduler和
    DBMS\u Scheduler来实现上面的步骤1-5。使用参数
    事件\u条件创建\u作业

    以下是上述链接中的一个示例:

    BEGIN
    DBMS_SCHEDULER.CREATE_JOB (
       job_name            =>  'process_lowinv_j1',
       program_name        =>  'process_lowinv_p1',
       event_condition     =>  'tab.user_data.event_type = ''LOW_INVENTORY''',
       queue_spec          =>  'inv_events_q, inv_agent1',
       enabled             =>  TRUE,
       comments            =>  'Start an inventory replenishment job');
    END;
    
    上面的代码创建了一个作业,当应用程序通知调度程序某个项目的库存水平已降至低阈值水平时,该作业开始


    能否以某种方式修改上述代码以执行预期的步骤?例如,是否可以在此处使用
    event\u condition
    来消除上述步骤2-4?等等。如果是这样,它会是什么样子,例如,如何设置
    队列\u spec

    假设您在远程服务器上安装了Oracle Scheduler Agent,
    DBMS\u Scheduler
    可以在远程计算机上运行可执行文件。我会让DML触发器将消息排队到Oracle高级队列(AQ)中,并使用该队列创建一个(DML触发器不允许提交或回滚事务,但运行
    DBMS\u调度程序
    作业会隐式发出提交,因此DML触发器无法直接运行作业)。基于事件的作业和运行远程可执行文件的作业将是。

    谢谢Justin,是的,我计划将代理放在远程服务器上。我不确定我是否遵循了上面的描述(过程似乎相当复杂)。请参阅上面的更新1,如果可以使用它,我可能会更容易遵循/实现它。