若需建立帶參數的 JOB,可在 WHAT 參數中宣告變數並賦值,再呼叫預存程序。
Pro_Test_JOB(p_param VARCHAR2)DECLARE
v_job NUMBER;
v_count NUMBER;
BEGIN
SELECT COUNT(*) INTO v_count
FROM user_jobs uj
WHERE UPPER(uj.what) = UPPER('DECLARE para_data VARCHAR2(100):=''參數''; BEGIN Pro_Test_JOB(para_data); END;');
IF v_count = 0 THEN
SYS.DBMS_JOB.SUBMIT(
job => v_job,
what => 'DECLARE para_data VARCHAR2(100):=''參數''; BEGIN Pro_Test_JOB(para_data); END;',
next_date => SYSDATE,
interval => 'SYSDATE+2/24' -- 每 2 小時
);
DBMS_JOB.RUN(v_job);
COMMIT;
END IF;
END;
WHAT 字串內雙引號需轉義(雙寫)。INTERVAL 使用 SYSDATE+2/24 表示 2 小時(1/24 = 1 小時)。USER_JOBS 避免重複建立。RUN 可馬上執行一次,之後依間隔自動執行。