使用 dbms_job 在包内执行 oracle 中的存储过程
Posted
技术标签:
【中文标题】使用 dbms_job 在包内执行 oracle 中的存储过程【英文标题】:Executing stored procedures in oracle inside a package using dbms_job 【发布时间】:2017-01-31 08:41:31 【问题描述】:我正在尝试使用 DBMS_JOB 通过包执行多个存储过程。即使作业正在提交并在 USER_JOBS 中显示,但由于某种原因它没有开始。我尝试过使用和不使用具有相同结果的“开始日期”参数,即没有开始。
我正在使用 ORACLE 9i,我想我不能使用 dbms_scheduler。
在代码下方找到:
--PACKAGE BODY--
create or replace
PACKAGE BODY PKG_TEST IS
PROCEDURE PASSPORT_DC_1 IS
l_jobno binary_integer;
l_jobno1 binary_integer;
BEGIN
dbms_job.submit(l_jobno1, 'BEGIN SP_ABC(); END;',SYSDATE );
DBMS_OUTPUT.PUT_LINE('SP_UPDATE_TIDCUMTL :' || l_jobno1);
COMMIT;
dbms_job.submit(l_jobno, 'BEGIN SP_XYZ(); END;',SYSDATE);
DBMS_OUTPUT.PUT_LINE('SP_UPDATE_TIDPTDTL :' || l_jobno);
COMMIT;
END PASSPORT_DC_1;
--PACKAGE SPEC--
create or replace PACKAGE PKG_TEST AS
PROCEDURE PASSPORT_DC_1;
END PKG_TEST;
【问题讨论】:
我使用 9i 已经有一段时间了,但尝试将 start_date 设置为 SYSDATE + 1/1440。通过查看 DBA_JOBS 来检查作业定义是否与您期望的一样,并且该作业没有“损坏”。然后看看你是否可以使用带有 jobid 的 DBMS_JOB.RUN 强制作业运行。 当我尝试通过执行 DBMS_JOB.RUN(job id) 手动运行它时。它正在执行,但是由于 DBMS_JOB.RUN(job id) 顺序执行作业,并行性的目的被破坏了。在示例中,有 2 个作业必须并行启动。 【参考方案1】:dbms_job.submit的3.参数为区间(see doc)。如果您只想运行一次存储过程,请尝试省略第三个参数(SYSDATE)。:
dbms_job.submit(l_jobno1, 'BEGIN SP_ABC(); END;');
【讨论】:
我也省略了最后一个参数。 dbms_job.submit(l_jobno1, 'BEGIN SP_ABC(); END;' ); DBMS_OUTPUT.PUT_LINE('SP_ABC() :' || l_jobno1);犯罪;工作还没有开始以上是关于使用 dbms_job 在包内执行 oracle 中的存储过程的主要内容,如果未能解决你的问题,请参考以下文章