【问题标题】:call back in dbms_scheduler job Oracle在 dbms_scheduler 作业 Oracle 中回调
【发布时间】:2021-01-21 21:48:23
【问题描述】:
当我们通过 dbms_schedular 启动作业时,它会在 *_SCHEDULER_JOBS 中创建一条记录
有没有办法在工作的中间或结束时。我写在记录上
示例:
Job_A 产生 Procedure_B
而在Procedure_B里面,我可以写回Job_A中*_scheduler_jobs中的记录
由于 procedure_B 在一系列子任务上循环,例如batch_id=1 到 10
我想将 id=1 和 id=10 写入 *_SCHEDULER_JOBS 中 Job_A 的条目
-感谢所有帮助。
【问题讨论】:
标签:
oracle
plsql
dbms-scheduler
【解决方案1】:
关于“我想将 id=1 和 id=10 写入 *_SCHEDULER_JOBS 中 Job_A 的条目”的问题有点模糊。
在过程中,您可以使用 SYS_CONTEXT('USERENV','BG_JOB_ID') 获取调度程序作业的对象 ID,并在 ALL_OBJECTS 中查找所有者/名称。如果作业由与过程相同的用户拥有或已被授予适当的权限,则它可以调用 DBMS_SCHEDULER.SET_ATTRIBUTE 来更改作业。根据它更改的属性,这可能只会在下一次运行作业时生效。
BG_JOB_ID 仅在作业从调度程序运行时才有效,如果有人在他们自己的会话中执行 dbms_scheduler.run_job 则无效。鉴于多个会话可以同时执行此操作,您可能不希望它们都尝试对作业进行更改。