使用作业ID作为过程参数

时间:2013-10-28 12:14:04

标签: oracle plsql dbms-job

我正在使用DBMS_JOB。是否可以将jobId(来自submit方法的OUT参数)作为调用过程的参数传递?

这就是我的尝试:

jobno                 NUMBER;

sql_string:= 'BEGIN BPM_API_BATCH.' || l_procedure_name || '(:jobno, sysdate);  END;';

DBMS_JOB.SUBMIT (jobno,
                 sql_string,
                 sysdate,
                 null); 

2 个答案:

答案 0 :(得分:4)

你真的需要将作业号作为参数传递吗?

在作业中,您可以调用SYS_CONTEXT( 'USERENV', 'BG_JOB_ID' )来获取job_id,而无需将其作为参数传递(如果在作业中未调用过程,则会返回NULL

答案 1 :(得分:0)

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