Oracle
更改 DBA_JOBS 的 WHAT 列
我正在使用作業來更新物化視圖。
我發現如果
exec dbms_refresh.refresh(''"<schema>"."<materialized_view_name>"'');
未送出作業,作業會自行鎖定,我想更改作業的“內容”列以包含送出。我面臨兩種可能的解決方案:
解決方案1:更複雜的方法是完全重新創建作業,我想避免
跑步
SYS.DBMS_JOB.REMOVE(14133); COMMIT;
重新創建整個作業以現在包含送出
DECLARE X NUMBER; BEGIN SYS.DBMS_JOB.SUBMIT ( job => X ,what => 'exec dbms_refresh.refresh(''"<schema>"."<materialized_view_name>"'');COMMIT;' ,next_date => to_date('11-11-2016 00:00:00','dd/mm/yyyy hh24:mi:ss') ,interval => 'trunc(sysdate)+1 ' ,no_parse => FALSE ); SYS.DBMS_OUTPUT.PUT_LINE('Job Number is: ' || to_char(x)); COMMIT; END; /
解決方案 2:通過在視圖上執行正常的更新語句直接更新 DBA_JOBS 視圖
update dba_jobs set what=( select what from dba_jobs where job in ( '1','2','3','<etc>') )||'COMMIT;' where job in ( '1','2','3','<etc>');
有沒有比這兩個更好的解決方案,解決方案兩個可能嗎?
我想避免使用解決方案 1,因為我暗示我手頭沒有視圖的程式碼,這將需要更多時間,另外讓我們暗示我有數百個需要修改。
真的嗎?
DBMS_JOB
有一個叫做CHANGE
.declare jobno number; begin dbms_job.submit(jobno, 'begin null; end;'); end; / commit; select job, what from user_jobs; JOB WHAT ---------- ------------------------------ 1 begin null; end; begin dbms_job.change(1, 'begin null; commit; end;', null, null); end; / commit; select job, what from user_jobs; JOB WHAT ---------- ------------------------------ 1 begin null; commit; end;