0
我試圖在執行某些邏輯後在存儲過程中創建dbms_scheduler作業。我的程序代碼如下。問題在於調度程序代碼未運行,並且該過程在創建作業時未引發任何異常。當作爲一個匿名塊獨立運行時,這項工作很好。這是完成我想要做的事情的正確方法嗎?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;
你怎麼知道當你一無所獲,它確實有它扔不拋出異常'當別人'?你是否看到'dbms_output'結果,它只能是1,或者沒有出現 - 表明你進入了異常處理程序?無論如何,您是否允許通過角色或直接向您的用戶創建工作? –
糟糕,我只是沒有輸出異常。我看到這是不足的特權問題。它是通過角色授予的。它在向用戶授予適當的權限後工作正常。感謝Alex Poole。 – DG3
讓異常傳播幾乎總是更好,而不是使用'when others'並試圖自己顯示異常;一開始調用者可能沒有啓用'dbms_output';並且如果它實際上成功,則從中調用的PL/SQL塊不能很高。 –