我正在尝试在执行某些逻辑后在存储过程中创建dbms_scheduler作业。我的程序代码如下。问题是调度程序代码没有运行,并且该过程在创建作业时没有抛出任何异常。作为匿名块独立运行时,作业会很好。这是完成我想要做的事情的正确方法吗?
create or replace procedure PROC_INS_TEST AS
v_success varchar2(255) := '1';
v_job_name varchar2(255);
BEGIN
SELECT 'TEST' || dbms_scheduler.generate_job_name into v_job_name
FROM DUAL;
INSERT INTO T_TEMP_STAGING--log table
(job_id, process_name) VALUES (1, 'TEST');
Commit;
v_success := '1';
BEGIN
sys.dbms_scheduler.create_job (
job_name => v_job_name,
job_type => 'PLSQL_BLOCK',
job_action => 'BEGIN PROC_TEST_SCHEDULER; END;',
--start_date => sysdate,
--repeat_interval => 'freq=hourly; byminute=0; bysecond=0;',
enabled => TRUE);
END;
dbms_output.put_line(v_success);
EXCEPTION
WHEN OTHERS THEN
v_success = '0';
ROLLBACK;
RETURN;
END PROC_INS_TEST;
答案 0 :(得分:2)
似乎您忘记包含单独的异常块来捕获create_job中的异常:
begin
sys.dbms_scheduler.create_job (
job_name => v_job_name,
job_type => 'PLSQL_BLOCK',
job_action => 'BEGIN PROC_TEST_SCHEDULER; END;',
enabled => TRUE);
exception when other than
dbms_output.put_line('Job ' || job_name || ' cannot be created! ' || SQLERRM);
raise;
end;