首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Oracle Scheduler启动基于事件的作业的新手

使用Oracle Scheduler启动基于事件的作业的新手
EN

Stack Overflow用户
提问于 2012-03-23 02:34:30
回答 1查看 2.1K关注 0票数 0

我在Oracle 11.2数据库中有一个表。如果table1中的特定单元格被更新为1,如果table2中的现有行数> 0,则数据库将在远程服务器上运行可执行文件。我对数据库中可能的内容没有太多的经验

  1. 使用Oracle Scheduler创建一个作业。作业立即运行,用于在远程服务器上运行外部可执行程序。作业存在,但直到下面的步骤5才能运行(这有可能吗?)01/server.112/e17120/schedadmin001.htm#BAJHIDDC
  2. 将DML触发器附加到对UPDATE语句激发的表的列中。01/appdev.112/e 25519/e25519 ers.htm#CIHEHBEB
  3. 让触发器调用PL/SQL子程序01/appdev.112/e 25519/e25519 ers.htm#CIHEGACF
  4. 在PL/SQL子程序中,执行以下业务逻辑:如果table1中的特定单元格等于1,如果表2中的行数大于0,则继续执行步骤5,否则停止(退出,退出)。
  5. 在步骤1中运行作业

或者,如果作业/调度程序不是用来提供此功能的,那么还有其他方法可以实现相同的功能吗?也就是说,对数据库表中的更改触发外部作业。

更新1:

我想知道是否有可能通过使用参数DBMS_SCHEDULER.CREATE_JOBevent_condition一起使用Oracle来实现上面的步骤1-5

01/server.112/e 25494/CHDIAJEB use005.htm#CHDIAJEB

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

代码语言:javascript
复制
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_condition来消除上面的步骤2-4吗?如果是这样的话,它会是什么样子,例如,如何设置queue_spec

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-03-23 02:52:57

假设您在远程服务器上安装了Oracle Scheduler代理,DBMS_SCHEDULER可以在远程计算机上运行可执行文件。我会让DML触发器将消息排队到Oracle (AQ)中,并使用该队列创建一个基于事件的作业 (DML触发器不允许提交或回滚事务,但运行DBMS_SCHEDULER作业会隐式地发出commit,因此DML触发器不能直接运行作业)。基于事件的作业和运行远程可执行文件的作业将是作业链的一部分。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9833407

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档