You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Oracle PL/SQL包中调用Scheduler调度作业?

问题

我开发了一个Oracle PL/SQL应用,用于按流程顺序启动作业,此前运行正常。主程序读取已注册待执行程序的表,通过DBMS_JOB提交作业,代码如下:

cJob := 'begin  
pkg_procesos_carga.ejecutar(''' ||
aProcesosCarga(nProcesoActual).esquema || ''',''' ||
aProcesosCarga(nProcesoActual).proceso || '''); 
end;';

dbms_job.submit(job => nJob,
what => cJob);
COMMIT;

该方式运行良好。现需将作业改为Scheduler调度,我编写了类似逻辑的代码:

cJob := 'BEGIN' || kNL;
cJob := cJob || 'DBMS_SCHEDULER.CREATE_JOB(' || kNL;
cJob := cJob || ' job_name => ' || '' || cJobProcess || '' || ',' || kNL;
cJob := cJob || ' job_type => ' || '''STORED_PROCEDURE''' || ',' || kNL;
cJob := cJob || ' job_action => ' || '' || cAction || '' || ',' || kNL;
cJob := cJob || ' auto_drop => TRUE,' || kNL;
cJob := cJob || 'enabled => TRUE,' || kNL;

代码可能存在错误,但核心逻辑如此。请问是否可以从包中启动Scheduler调度作业?

回答

完全可以从PL/SQL包中调用DBMS_SCHEDULER.CREATE_JOB来创建并启动调度作业,这是Oracle官方支持的用法,和你之前用DBMS_JOB的场景适配性一致。

不过你当前的代码有几个需要修正的点:

  • 字符串拼接时的引号处理有误:比如job_name => ' || '' || cJobProcess || '' || ','这种写法会引发语法错误,正确的转义写法应该是'job_name => ''' || cJobProcess || ''','
  • 代码片段未闭合DBMS_SCHEDULER.CREATE_JOB的括号以及BEGIN...END块,执行时会直接报错
  • 调用DBMS_SCHEDULER.CREATE_JOB后同样需要执行COMMIT来确认作业创建(除非使用自治事务)

另外,调用存储过程时,job_action需指定存储过程的完整名称(包含模式名);如果需要传参,建议通过job_argument_names和job_arguments参数传递,而非像DBMS_JOB那样直接拼进字符串——这是Scheduler和DBMS_JOB的关键区别,能避免大量引号拼接的问题,提升代码可读性和稳定性。

给你一个修正后的示例参考:

DECLARE
  cJobProcess VARCHAR2(100) := 'MY_JOB_001';
  cAction VARCHAR2(200) := 'PKG_PROCESOS_CARGA.EJECUTAR';
BEGIN
  DBMS_SCHEDULER.CREATE_JOB(
    job_name        => cJobProcess,
    job_type        => 'STORED_PROCEDURE',
    job_action      => cAction,
    job_argument_names => 'ESQUEMA, PROCESO',
    job_arguments   => SYS.ODCIVARCHAR2LIST(aProcesosCarga(nProcesoActual).esquema, aProcesosCarga(nProcesoActual).proceso),
    auto_drop       => TRUE,
    enabled         => TRUE
  );
  COMMIT;
END;
/

内容的提问来源于stack exchange,提问作者user2840273

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 12:15:30