使用 Job ID 作为过程参数
Posted
技术标签:
【中文标题】使用 Job ID 作为过程参数【英文标题】:Use Job ID as a procedure parameter 【发布时间】:2013-10-28 12:14:04 【问题描述】:我正在使用 DBMS_JOB。是否可以将jobId(提交方法的OUT参数)作为调用过程的参数传递?
这就是我正在尝试的:
jobno NUMBER;
sql_string:= 'BEGIN BPM_API_BATCH.' || l_procedure_name || '(:jobno, sysdate); END;';
DBMS_JOB.SUBMIT (jobno,
sql_string,
sysdate,
null);
【问题讨论】:
【参考方案1】:您真的需要将工作编号作为参数传递吗?
在作业中,您可以调用SYS_CONTEXT( 'USERENV', 'BG_JOB_ID' )
来获取job_id
,而无需将其作为参数传入(如果作业中未调用该过程,则将返回NULL
。
【讨论】:
是的,这正是我所需要的。我不知道它可以这样获取。发送【参考方案2】:DBMS_JOB.WHAT 过程可用于更改 PL/SQL 以运行:http://docs.oracle.com/cd/B28359_01/appdev.111/b28419/d_job.htm#i1000977
CREATE TABLE testt(
val varchar2(100)
);
DECLARE
jobno NUMBER;
BEGIN
DBMS_JOB.SUBMIT(
job => jobno,
what => 'BEGIN NULL; END;',
NEXT_DATE => sysdate
);
DBMS_JOB.WHAT(
job => jobno,
what => 'BEGIN INSERT INTO testt VALUES(''jobno = ' || jobno || ''' ); commit; end;'
);
commit;
END;
/
SELECT * FROM testt;
VAL
-------------
jobno = 26
【讨论】:
以上是关于使用 Job ID 作为过程参数的主要内容,如果未能解决你的问题,请参考以下文章
如何在 PLSQL 过程中将绑定变量作为 IN OUT 参数传递